Ошибка при объединении вложенной строки списка в список строк

У меня есть вложенные списки, содержащие пример строки, как

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

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

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

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

all_tokens = sum(text, [])

но это приносит мне ошибку, говорящую

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

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

РЕДАКТИРОВАТЬ

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

3 ответа

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

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

Вывод:

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

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

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

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

print sum(l, [])

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

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

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


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

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

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

mylist = list(set(b))


используйте 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)

licensed under cc by-sa 3.0 with attribution.