【发布时间】:2022-01-09 17:54:21
【问题描述】:
在 Python 中是否有从列表列表中创建简单列表的快捷方式?
我可以在 for 循环中做到这一点,但是有一些很酷的“单线”吗?
我用functools.reduce()试了一下:
from functools import reduce
l = [[1, 2, 3], [4, 5, 6], [7], [8, 9]]
reduce(lambda x, y: x.extend(y), l)
但我收到此错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <lambda>
AttributeError: 'NoneType' object has no attribute 'extend'
【问题讨论】:
-
这里有一个深入的讨论:rightfootin.blogspot.com/2006/09/more-on-python-flatten.html,讨论了几种扁平化任意嵌套列表的方法。读起来很有趣!
-
其他一些答案更好,但你失败的原因是'extend'方法总是返回None。对于长度为 2 的列表,它将工作但返回 None。对于更长的列表,它将消耗前 2 个 args,返回 None。然后它继续使用 None.extend(
),这会导致这个错误 -
stackoverflow.com/questions/50259290/…(本文解释了 np.flatten() 和 tf.flatten() 使用(静态与动态)ndarray 之间的区别。
-
这是一个很常见的重复目标。但是,对于 OP 已经有一个生成列表列表的过程(特别是如果它是一个列表推导式)的情况,请考虑 stackoverflow.com/questions/1077015/… 是否是更适用的副本。
-
你的 lambda 应该是
reduce(lambda a, b: a + b, l)
标签: python list multidimensional-array flatten