2016-12-05 2 views
0

У меня есть список списков, как этотпреобразовать список списков в список строки

list1 = [['I am a student'], ['I come from China'], ['I study computer science']] 
len(list1) = 3 

Теперь я хотел бы, чтобы преобразовать его в список строку, как этот

list2 = ['I', 'am', 'a', 'student','I', 'come', 'from', 'China', 'I','study','computer','science'] 
len(list2) = 12 

I Я знаю, что я мог бы преобразование таким образом

new_list = [','.join(x) for x in list1] 

Но она возвращает

['I,am,a,student','I,come,from,China','I,study,computer,science'] 
len(new_list) = 3 

Я также попытался это

new_list = [''.join(x for x in list1)] 

, но он дает следующую ошибку

TypeError: sequence item 0: expected str instance, list found 

Как я могу извлечь каждое слово в подсписка list1 и превратить его в список строки? Я использую python 3 в окнах 7.

+0

песни1 есть один элемент, который представляет собой список с тремя элементами. – bohrax

+0

Если в списке1 есть три элемента, ваш вопрос, вероятно, должен быть переформулирован на «Преобразование списка предложений в список слов» – bohrax

+0

@bohrax, извините, я редактировал вопрос, это должен быть список списков. –

ответ

1

После вашего редактирования я считаю, что наиболее прозрачным подходом является тот, который был принят другим ответом (ответ, который с тех пор был удален, я думаю). Я добавил некоторые пробелы, чтобы сделать его легче понять, что происходит:

list1 = [['I am a student'], ['I come from China'], ['I study computer science']] 
list2 = [ 
    word 
     for sublist in list1 
     for sentence in sublist 
     for word in sentence.split() 
] 
print(list2) 

гравюр:

['I', 'am', 'a', 'student', 'I', 'come', 'from', 'China', 'I', 'study', 'computer', 'science'] 
+0

Извините, я редактировал вопрос, это должен быть список списков. –

+0

См. Отредактированный ответ – jez

0

Учитывая список списков, где каждый подсписок содержат строки это может быть решена с помощью стратегии JEZ как :

list2 = ' '.join([' '.join(strings) for strings in list1]).split() 

Если список постижение преобразует list1 в список строк:

>>> [' '.join(strings) for strings in list1] 
['I am a student', 'I come from China', 'I study computer science'] 

Затем соединение создаст строку из строк, а split будет создавать список, разделенный на пробелы.

Если подсписки содержат только одиночные строки, вы могли бы упростить список понимание:

list2 = ' '.join([l[0] for l in list1]).split() 
+0

Не должен ли '' '' '' быть в другом порядке? (Я нахожу, что тоже несовместим.) – jez

+0

@jez Я считаю, что это правильно, используя исходные данные OP. Он просто выравнивает список на двух уровнях. Во всяком случае, вопрос был изменен, поэтому я отредактировал ответ. – bohrax

Смежные вопросы