web-dev-qa-db-ja.com

Pythonで2つのリストをマージする最速の方法は何ですか?

与えられた、

list_1 = [1,2,3,4]
list_2 = [5,6,7,8]

Pythonで次を達成するための最速の方法とは何ですか?

list = [1,2,3,4,5,6,7,8]

Pythonの2つのリストをマージする方法はたくさんあることに注意してください。私は最も時間効率の良い方法を探しています。

[編集] ++++++++++++++++++++++++++++++++++++++++++++++ [編集]

すべての答えをありがとう。あなたのアイデアを得て、私は以下を試しました、そして、ここに私の理解があります。

コード

import time

c = list(range(1,10000000))
c_n = list(range(10000000, 20000000))

start = time.time()
c = c+c_n
print len(c)
print time.time() - start

c = list(range(1,10000000))
start = time.time()
for i in c_n:
    c.append(i)
print len(c)
print time.time() - start

c = list(range(1,10000000))
start = time.time()
c.extend(c_n)
print len(c)
print time.time() - start

出力

19999999
0.125061035156
19999999
1.02858018875
19999999
0.03928399086

だから、誰かが質問でlist_1/list_2を再利用することを気にしないのであれば、extendが道です。一方、"+"が最速の方法です。

しかし、他のオプションについてはわかりません。

再度、感謝します :-)

21
Naffi

単に連結を使用できます:

list = list_1 + list_2

List_1を保持する必要がない場合は、変更するだけです。

list_1.extend(list_2)
22
phant0m

list_1 + list_2それを行います。例-

>>> list_1 = [1,2,3,4]
>>> list_2 = [5,6,7,8]
>>> list_1 + list_2
[1, 2, 3, 4, 5, 6, 7, 8]
9
Sukrit Kalra

python 3を使用している場合、これを行う方法がもう1つあり、少し高速です(python 3.7でのみテスト済み)

[*list1, *list2]

ベンチマーク

from timeit import timeit
x = list(range(10000))
y = list(x)

def one():
    x + y

def two():
    [*x, *y]

print(timeit(one, number=1000, globals={'x':x, 'y': y}))
print(timeit(two, number=1000, globals={'x':x, 'y': y}))
0.10456193100253586
0.09631731400440913
2
Mohit Solanki