在 python 中要将两个 list
连接起来的方法有很多
以下主要比较用三种方法:__add__
, list.extend
与itertools.chain
后转list
import timefrom itertools import chainone = list(range(10000))two = list(range(10000))def use_add(): three = one + twodef use_extend(): three = one.copy() three.extend(two)def use_chain(): three = list(chain(one, two))
Add
start_time = time.time()for _ in range(10000): use_add()time.time() - start_time
Time: 0.9798197746276855 s
Extend
start_time = time.time()for _ in range(10000): use_extend()time.time() - start_time
Time: 0.9656569957733154 s
Chain
start_time = time.time()for _ in range(10000): use_chain()time.time() - start_time
Time: 2.501063823699951 s
结
__add__
与 extend
几乎一样,到collections
里面找实做的方法,发现__add__
基本上是直接呼叫extend
,所以时间上自然几乎一样:
class MutableSequence(Sequence): pass def __iadd__(self, values): self.extend(values) return self
至于chain
比另外两者慢了快2.5倍,原因可能是 chain
完后是生成迭代器,透过list
将迭代器再转换成list
的时候需要在对每个元素检查一次,所以用了更多时间。
不知道这样的测试是否正确,希望大家可以多给我些意见