2024-04-24 13:00:47 发布
网友
Duplicates:Flattening a shallow list in PythonComprehension for flattening a sequence of sequences?
Duplicates:
假设我有一个嵌套列表:
[["a","b","c"], ["d","e","f"], ["g","h","i","j"]...]
把它转换成这样一个列表的最佳方法是什么
["a", "b", "c", "d", "e"....]
在itertools文档中有一个直接的例子(请参见http://docs.python.org/library/itertools.html#recipes查找flatten()),但它非常简单:
itertools
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():
reduce()
>>> from operator import add >>> reduce(add, x) ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
使用^{}:
from itertools import chain list(chain.from_iterable(list_of_lists))
使用itertools.chain的另一种解决方案是:
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更多的pythonic方法来实现这个结果。
在
itertools
文档中有一个直接的例子(请参见http://docs.python.org/library/itertools.html#recipes查找flatten()
),但它非常简单:或者,在一个列表理解中可以很容易地完成:
或者通过
reduce()
:使用^{} :
使用
itertools.chain
的另一种解决方案是:编辑:以上示例将在生成新列表时使用原始列表,因此,如果您正在处理非常大的列表并希望最小化内存使用,那么这应该是一个优势。如果不是这样的话,我会考虑使用
itertools.chain
更多的pythonic方法来实现这个结果。相关问题 更多 >
编程相关推荐