Существует ли лучший способ выполнить итерации более чем двух списков, получая один элемент из каждого списка для каждого повторения? [дубликат]

130
задан chongman 11 November 2019 в 21:18
поделиться

6 ответов

Это настолько питонический, насколько вы можете получить:

for lat, long in zip(Latitudes, Longitudes):
    print lat, long
249
ответ дан 24 November 2019 в 00:21
поделиться

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

from itertools import izip
for lat, lon in izip(latitudes, longitudes):
    process(lat, lon)

или если вы хотите избегайте цикла for

from itertools import izip, imap
out = imap(process, izip(latitudes, longitudes))
15
ответ дан 24 November 2019 в 00:21
поделиться

Другой способ сделать это - использовать map .

>>> a
[1, 2, 3]
>>> b
[4, 5, 6]
>>> for i,j in map(None,a,b):
    ...   print i,j
    ...
1 4
2 5
3 6

Одно отличие в использовании карты по сравнению с zip состоит в том, что с zip длина нового списка составляет
то же, что и длина самого короткого списка. Например:

>>> a
[1, 2, 3, 9]
>>> b
[4, 5, 6]
>>> for i,j in zip(a,b):
    ...   print i,j
    ...
1 4
2 5
3 6

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

>>> for i,j in map(None,a,b):
    ...   print i,j
    ...

    1 4
    2 5
    3 6
    9 None
47
ответ дан 24 November 2019 в 00:21
поделиться

Итерация по элементам двух списков одновременно известна как zip-архивирование, а python предоставляет встроенный функция для него, которая описана здесь .

>>> x = [1, 2, 3]
>>> y = [4, 5, 6]
>>> zipped = zip(x, y)
>>> zipped
[(1, 4), (2, 5), (3, 6)]
>>> x2, y2 = zip(*zipped)
>>> x == list(x2) and y == list(y2)
True

[Пример взят из pydocs]

В вашем случае это будет просто:

for (lat, lon) in zip(latitudes, longitudes):
    ... process lat and lon
6
ответ дан 24 November 2019 в 00:21
поделиться
for Lat,Long in zip(Latitudes, Longitudes):
5
ответ дан 24 November 2019 в 00:21
поделиться

Приятно видеть огромную любовь к zip ] в ответах здесь.

Однако следует отметить, что если вы используете версию python до 3.0, модуль itertools в стандартной библиотеке содержит функцию izip , которая возвращает итерируемый объект, что больше уместно в этом случае (особенно если ваш список latt / longs довольно длинный).

В python 3 и более поздних версиях zip ведет себя как izip .

21
ответ дан 24 November 2019 в 00:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: