【发布时间】:2019-04-05 23:46:42
【问题描述】:
我正在运行以下代码:
x = []
for i in c:
x = x+i
结果有大约 50-1 亿个元素。
这需要几分钟才能在我的 PC 上运行。我怎样才能加快这个速度?
【问题讨论】:
-
sum(c) 绝对是更好的代码,我没想到。不过似乎仍然很慢。
-
No
sum不是更好的代码。使用.extend在一个循环中连接,这将具有非对称的恒定时间行为而不是二次行为。或者使用+=(调用extend)。只是简单的列表连接,+是 O(A+B),所以要连接一堆小列表,这会在最终列表的大小上产生二次时间复杂度。取而代之的是,extend是 O(B),其中 B 是较小列表的大小,因此在最终列表的大小上是 O(N)。 -
@cjm2671,请提供一个minimal reproducible example。
-
@PMende 他们在做同样的事情。
+=只是更快,因为解释器不必解析c.extend,属性访问很慢,+=将缩短它 -
@cjm2671 试试
list(chain.from_iterable(c)),应该是最快的
标签: python python-3.x list