Уже заданы вопросы о том, как создавать пары из двух списков, но все они создают парные списки как кортежи.
Скажем, у меня есть два списка: list1
и list2
list1 = [0,2,4,6,8]
list2 = [1,3,5,7,9]
Объединение обоих в один список кортежей:
pairs = list(zip(list1, list2))
print(pairs)
Выход:
>>> [(0, 1), (2, 3), (4, 5), (6, 7), (8, 9)]
Чтобы изменить тип списков из кортежа в список:
listPairs = [list(pair) for pair in pairs]
print(listPairs)
Выход:
[[0, 1], [2, 3], [4, 5], [6, 7], [8, 9]]
Сочетание обоих:
combined = [list(i) for i in list(zip(list1, list2))]
Теперь мой вопрос заключается в следующем: есть ли более быстрый питонический способ сделать это? Понимание списка уже является питоновым и относительно быстрым в относительно небольших списках, но есть ли более быстрый способ? Или это будет самым быстрым способом?
Моя проблема заключается в том, что я использую этот способ в двух списках, где каждый 300k+ имеет размер.
Обычно понимание списков так же эффективно, как вы можете получить, если вам нужны все результаты в один момент времени. Существует краевой случай, когда map
со встроенной функцией будет более эффективной, чем понимание списка. Дополнительную информацию см. В разделе "Понимание списков" и "Карта". Таким образом, вы можете использовать:
pairs = list(map(list, zip(list1, list2)))
Это должно быть незначительно более эффективным, чем:
pairs = [list(x) for x in zip(list1, list2)]
Если вам нужна производительность за пределами этого незначительного улучшения, я предлагаю вам использовать специализированную библиотеку, такую как NumPy: см. Какие преимущества NumPy для регулярных списков Python?
%timeit
и получил 12.1 µs
для карты и 17.7 µs
для списка. Как вы думаете, это хорошо?