Самый эффективный способ объединить несколько больших списков - PullRequest
0 голосов
/ 27 мая 2020

У меня есть несколько больших списков. Я хотел бы объединить их в одноконфессиональный список. Например,

small_lists = [[{'value1':1}]*100000,[{'value2':2}]*100000,[{'value3':3}]*100000]
combined_list = []
for small_list in small_lists:
    combined_list.extend(small_list)

Есть ли более быстрый способ, чем указано выше?

numpy предлагается в нескольких ответах, но для меня он кажется значительно медленнее. Я что-то делаю не так?

import time
import numpy as np

small_lists = [[{'value1':1}]*10000000,[{'value2':2}]*10000000,[{'value3':3}]*10000000]

start = time.time()
np_list = np.array(small_lists).flatten()
print("{} sec".format(time.time() - start))
print(len(np_list))

start = time.time()
combined_list = []
for small_list in small_lists:
    combined_list.extend(small_list)
print("{} sec".format(time.time() - start))
print(len(combined_list))

from functools import reduce
start = time.time()
reduce_list = reduce(lambda x, y: x+y, small_lists)
print("{} sec".format(time.time() - start))
print(len(reduce_list))

Результат: 2,01335906982 se c для numpy, 0,113998889923 se c для расширения, 0,299326896667 se c для уменьшения. extend, безусловно, самый быстрый.

Ответы [ 2 ]

0 голосов
/ 27 мая 2020
from functools import reduce

combined_list = reduce(lambda x, y: x + y, small_lists)

https://docs.python.org/3.7/library/functools.html#functools. Уменьшить

0 голосов
/ 27 мая 2020

Используйте numpy - для очень больших массивов это может быть в 10-100 раз быстрее:

import numpy as np

np_array = np.array(small_list)
flat = np_array.flatten()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...