2014-11-13 2 views
-1

У меня есть вложенные списки содержат пример строки, какОшибка при конкатенации вложенного списка строки в список строк

[['abc','abc df','pqr'],['xyz','efg']] 

Я хочу, чтобы сцепить этот вложенный список в один список строк, такие как

['abc','abc df','pqr','xyz','efg'] 

вот так. я использую код

all_tokens = sum(text, []) 

но его принося мне ошибку говоря

can only concatenate list (not "str") to list 

Почему его происходит, как это? как исправить ошибку? также каковы альтернативные методы для выполнения одной и той же задачи?

EDIT

я знаю итерацию через цикл может управлять то же самое. но я ищу быстрый метод

+0

Ваш код работает хорошо для меня. –

+0

@AshwiniChaudhary Я использую очень длинный список документов. Может быть где-то проблема –

ответ

3

Вы можете использовать reduce, он просматривает списки и объединяет их.

l=[['abc','abc df','pqr'],['xyz','efg']] 
print reduce(lambda x,y:x+y,l) 

Выход:

['abc', 'abc df', 'pqr', 'xyz', 'efg'] 

Вы можете использовать вложенные циклы в списке понимания, а

print [item for subL in l for item in subL] 

Вы можете подвести список, используя sum()

print sum(l, []) 

Вы также можете использовать itertools.chain()

from itertools import chain 
print list(chain(*l)) 

Это даст тот же результат.

+0

Спасибо taha. работает как волшебство –

2

Некоторый пример кода был бы хорош, но я предполагаю, что у вас есть список списков, которые вы хотели бы «объединить» в один список. Вот как это можно сделать:

a = [['abc','abc df','pqr'],['xyz','efg']] 
b = [] 
for element in a: 
    b.extend(element) 

Он не будет проверять наличие повторяющихся элементов. Для этого вы можете использовать set, чтобы убедиться, что каждый элемент присутствует только один раз:

mylist = list(set(b)) 
1

использовать itertools.chain так:

from itertools import chain 
x = chain.from_iterable([['abc','abc df','pqr'],['xyz','efg']]) 
# you can also make a list out of it, if you need to 
x = list(x) 
Смежные вопросы