在 python 中要將兩個 list
連接起來的方法有很多
以下主要比較用三種方法:__add__
, list.extend
與itertools.chain
後轉list
import time
from itertools import chain
one = list(range(10000))
two = list(range(10000))
def use_add():
three = one + two
def use_extend():
three = one.copy()
three.extend(two)
def use_chain():
three = list(chain(one, two))
start_time = time.time()
for _ in range(10000):
use_add()
time.time() - start_time
Time: 0.9798197746276855 s
start_time = time.time()
for _ in range(10000):
use_extend()
time.time() - start_time
Time: 0.9656569957733154 s
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
的時候需要在對每個元素檢查一次,所以用了更多時間。
不知道這樣的測試是否正確,希望大家可以多給我些意見
還有最基本的方式,你沒測喔.
>>> a = [1,2,3]
>>> b = [4,5,6]
>>> a + b
[1, 2, 3, 4, 5, 6]
謝謝補充