Более быстрый способ взять два списка целых чисел и создать пары списков типов

1

Уже заданы вопросы о том, как создавать пары из двух списков, но все они создают парные списки как кортежи.

Скажем, у меня есть два списка: 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+ имеет размер.

  • 2
    Почему бы вам не профилировать подходы?
  • 0
    В зависимости от вашего конкретного случая использования может быть целесообразным ленивое отображение.
Показать ещё 3 комментария
Теги:
performance
list
python-3.x
loops

1 ответ

1

Обычно понимание списков так же эффективно, как вы можете получить, если вам нужны все результаты в один момент времени. Существует краевой случай, когда map со встроенной функцией будет более эффективной, чем понимание списка. Дополнительную информацию см. В разделе "Понимание списков" и "Карта". Таким образом, вы можете использовать:

pairs = list(map(list, zip(list1, list2)))

Это должно быть незначительно более эффективным, чем:

pairs = [list(x) for x in zip(list1, list2)]

Если вам нужна производительность за пределами этого незначительного улучшения, я предлагаю вам использовать специализированную библиотеку, такую как NumPy: см. Какие преимущества NumPy для регулярных списков Python?

  • 0
    я создал два списка из 100 элементов и протестировал эти два решения в ipython с %timeit и получил 12.1 µs для карты и 17.7 µs для списка. Как вы думаете, это хорошо?
  • 1
    @BearBrown, я ничего не знаю о вашем случае использования. Является ли это приемлемым или нет, зависит от ваших потребностей. Для таких небольших списков эти незначительные различия, вероятно, не имеют значения.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню