如何提取嵌套列表?

26 投票
3 回答
53038 浏览
提问于 2025-04-17 07:24

重复内容:

假设我有一个包含嵌套列表的列表:

[["a","b","c"], ["d","e","f"], ["g","h","i","j"]...]

有什么好的方法可以把它转换成一个单一的列表呢?

["a", "b", "c", "d", "e"....]

3 个回答

3

使用 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']

编辑: 上面的例子在创建新列表的同时会消耗掉你原来的列表,所以如果你在处理非常大的列表并且想要减少内存使用,这样做是有好处的。如果不是这种情况,我建议使用 itertools.chain,这样更符合 Python 的风格,可以更好地达到目的。

27

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']
44

使用 itertools.chain

from itertools import chain

list(chain.from_iterable(list_of_lists))

撰写回答