Используя понимание списков в Python, чтобы сделать что-то похожее на zip ()?

Я новичок в Python, и одна из вещей, которую я пытаюсь сделать, – это обернуть голову вокруг понимания списка. Я вижу, что это довольно мощная функция, заслуживающая изучения.

cities = ['Chicago', 'Detroit', 'Atlanta'] airports = ['ORD', 'DTW', 'ATL'] print zip(cities,airports) [('Chicago', 'ORD'), ('Detroit', 'DTW'), ('Atlanta', 'ATL')] 

Как использовать понимание списка, чтобы я мог получить результаты как ряд списков в списке, а не серию кортежей в списке?

 [['Chicago', 'ORD'], ['Detroit', 'DTW'], ['Atlanta', 'ATL']] 

(Я понимаю, что словари, вероятно, были бы более уместны в этой ситуации, но я просто пытаюсь понять списки немного лучше). Благодаря!

5 Solutions collect form web for “Используя понимание списков в Python, чтобы сделать что-то похожее на zip ()?”

Что-то вроде этого:

 [[c, a] for c, a in zip(cities, airports)] 

В качестве альтернативы конструктор list может преобразовывать кортежи в списки:

 [list(x) for x in zip(cities, airports)] 

Или, в этом случае функция map немного меньше подробностей:

 map(list, zip(cities, airports)) 

Если вы хотите сделать это без использования zip вообще, вам нужно будет сделать что-то вроде этого:

 [ [cities[i],airports[i]] for i in xrange(min(len(cities), len(airports))) ] 

но нет оснований делать это иначе, чем интеллектуальное упражнение.

Использование map(list, zip(cities, airports)) короче, проще и почти наверняка будет работать быстрее.

itertools списка, без какой-либо помощи zip , map или itertools , не может создать «параллельный цикл» для нескольких последовательностей – только простые циклы на одной последовательности или «вложенные» петли на нескольких.

Это делает вывод zip и преобразует все кортежи в списки:

 map(list, zip(cities, airports)) 

Что касается производительности каждого из них:

 $ python -m timeit -c '[ [a, b] for a, b in zip(xrange(100), xrange(100)) ]' 10000 loops, best of 3: 68.3 usec per loop $ python -m timeit -c 'map(list, zip(xrange(100), xrange(100)))' 10000 loops, best of 3: 75.4 usec per loop $ python -m timeit -c '[ list(x) for x in zip(range(100), range(100)) ]' 10000 loops, best of 3: 99.9 usec per loop 

Можно также использовать enumerate :

 [[y,airports[x]] for x,y in enumerate(cities)] 
  • Понимание списка Python с уникальными элементами
  • список вызовов функции, использующей понимание списка
  • Поиск и группировка анаграмм Python
  • Самый эффективный способ Python выбрать самую длинную строку в списке?
  • Pythonic способ распечатать элементы списка
  • Ошибка синтаксиса Python - In и Not In List
  • list.extend и понимание списка
  • Массивное понимание в JavaScript?
  • Python - лучший язык программирования в мире.