Дубликаты:
Предположим, у меня есть список с вложенными списками:
[["a","b","c"], ["d","e","f"], ["g","h","i","j"]...]
как лучше всего преобразовать его в один список, подобный этому
["a", "b", "c", "d", "e"....]
Дубликаты:
Предположим, у меня есть список с вложенными списками:
[["a","b","c"], ["d","e","f"], ["g","h","i","j"]...]
как лучше всего преобразовать его в один список, подобный этому
["a", "b", "c", "d", "e"....]
Используйте itertools.chain
:
from itertools import chain
list(chain.from_iterable(list_of_lists))
Вот пример этого в документации itertools
(см. http://docs.python.org/library/itertools.html#recipes искать flatten()
), но это как просто:
>>> from itertools import chain
>>> list(chain(*x))
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
Или это можно сделать очень легко в одном понимании списка:
>>> x=[["a","b","c"], ["d","e","f"], ["g","h","i","j"]]
>>> [j for i in x for j in i]
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
Или через reduce()
:
>>> from operator import add
>>> reduce(add, x)
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
Альтернативным решением для использования itertools.chain
было бы следующее:
>>> li = [["a","b","c"], ["d","e","f"], ["g","h","i","j"]]
>>> chained = []
>>> while li:
... chained.extend(li.pop(0))
...
>>> chained
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
EDIT: Приведенный выше пример будет потреблять ваши исходные списки при создании нового, поэтому это должно быть преимуществом, если вы манипулируете очень большими списками и хотите минимизировать использование памяти. Если это не так, я бы рассмотрел возможность использования itertools.chain
более питонического способа достижения результата.