我有一长串子列表。我想将子列表的所有元素收集到一个列表中。例如:
lst = [[i, i + 1] for i in range(10)]
print(lst)
[[0, 1], [1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [6, 7], [7, 8], [ 8, 9], [9, 10]]
flat = sum(lst, [])
print(flat)
[0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10]
代码简短明了。这怎么可能不好?
一般来说,这是一个非常耗时的方法。在小列表上它是难以察觉的,但在大列表上事情变得很糟糕。
例如,
sum([[1, 2], [3, 4], ...], [])
我们将它排成一行[] + [1, 2] + [3, 4] + ...
。在每个连接上,都会创建一个新列表,O(n)
并以此类推 n 次。因此,我们有复杂性O(n^2)
。在修改列表的情况下。据我了解,我们有复杂性,O(n)
. 如果我错了,希望能得到纠正。)相比:
在 100 个元素的列表中,我们有一个可比较的平均结果,但是,从 1k 个元素开始,我们的平均结果已经相差一个数量级,并且相差 10k - 已经是两个数量级:
举例说明