web-dev-qa-db-fra.com

Quel est le moyen le plus rapide de fusionner deux listes en python?

Donné,

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

Quel est le moyen le plus rapide pour réaliser ce qui suit en python?

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

Veuillez noter qu'il peut y avoir plusieurs façons de fusionner deux listes en python. Je recherche le moyen le plus efficace en termes de temps.

[EDIT] ++++++++++++++++++++++++++++++++++++++++++++++ [EDIT]

Merci pour toutes les réponses. En obtenant vos idées, j'ai essayé ce qui suit et voici ma compréhension.

CODE

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

PRODUCTION

19999999
0.125061035156
19999999
1.02858018875
19999999
0.03928399086

Donc, si quelqu'un ne prend pas la peine de réutiliser list_1/list_2 dans la question, alors étendre est le chemin à parcourir. D'autre part, "+" est le moyen le plus rapide.

Je ne suis pas sûr cependant d'autres options.

Merci encore :-)

21
Naffi

Vous pouvez simplement utiliser la concaténation:

list = list_1 + list_2

Si vous n'avez pas besoin de conserver list_1, vous pouvez simplement le modifier:

list_1.extend(list_2)
22
phant0m

list_1 + list_2 le fait. Exemple -

>>> 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

Si vous utilisez python 3, il existe une autre façon de le faire et un peu plus rapidement (testé uniquement sur python 3.7)

[*list1, *list2]

Référence

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