找到最快速有效的方法来将列表转换为扁平化同时保持顺序是很有趣的:
[
[5, 6],
[7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18]
]
结果[5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]?
找到最快速有效的方法来将列表转换为扁平化同时保持顺序是很有趣的:
[
[5, 6],
[7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18]
]
结果[5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]?
你为什么不喜欢简单的列表相加?我也尝试过
Numpy翻译,但事实证明,将普通列表转换为数组Numpy就耗尽了Numpy快速使用其本机数据类型所带来的所有可能的好处。现在,如果您已经拥有数组格式的数据Numpy,那么使用内置方法是有意义的Numpy,并且它比纯 Python 更快。结论:
0.3 秒内组装 1400 万个元件。
PS是的,当向列表添加元素时,为列表准备的数组会定期调整大小,但它是有一个边距(之前大小的 2 倍,或者对于已经非常大的列表可能是 1.5 倍)完成的 - 我不太记得了Python 中的实现细节,我可能会与 中的列表混淆
C#,如果我们采用 2,那么这只是初始列表大小 16 到 1400 万的大约 20 次调整大小)。因此,复制整个列表而耗时的调整大小并不经常发生,并且简单地将元素放置在列表的下一个空闲单元中是很便宜的,Python 对于典型的集合操作进行了相当优化。PPS根据观众的要求,我在保持元素总数的同时计算了对数组大小和数量的依赖性。
结论:
从这个测试中可以看出,列表更少 -> 调整大小更少 -> 在元素总数相同的情况下,连接列表的过程花费的时间更少。