Каков самый быстрый способ слияния двух списков в python? - программирование
Подтвердить что ты не робот

Каков самый быстрый способ слияния двух списков в python?

Учитывая,

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

Что такое самый быстрый способ для достижения следующего в python?

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

Обратите внимание, что может быть много способов объединить два списка в python. Я ищу наиболее эффективный способ времени.

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

Спасибо за все ответы. Получив ваши идеи, я попробовал следующее, и вот мое понимание.

КОД

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 - это путь. С другой стороны, "+" является самым быстрым способом.

Я не уверен в других вариантах.

Еще раз спасибо: -)

4b9b3361

Ответ 1

Вы можете просто использовать конкатенацию:

list = list_1 + list_2

Если вам не нужно держать list_1 вокруг, вы можете просто изменить его:

list_1.extend(list_2)

Ответ 2

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]

Ответ 3

Если вы используете Python 3, есть еще один способ сделать это и немного быстрее (проверено только на Python 3.7)

[*list1, *list2]

Benchmark

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

Ответ 4

Иногда вы можете найти дубликаты в своем окончательном объединенном списке. Чтобы избежать этого, вы можете использовать встроенную функцию set():

final_list = list(set(list_1 + list_2))