Итерация по двум итераторам параллельно без использования функции zip в Python? - PullRequest
0 голосов
/ 25 сентября 2019

В python идиоматический способ перебора параллельных итераторов заключается в использовании функции "zip".

Python 3.6.5 (default, Mar 31 2018, 19:45:04) [GCC] on linux
>>> it1 = range(0,5)
>>> it2 = range(3,10)
>>> for x1, x2 in zip(it1, it2): print('', x1, x2, sep='\t')
... 
        0       3
        1       4
        2       5
        3       6
        4       7
>>> it1 = range(0,5)
>>> it2 = range(3,10)
>>> [ 100*x1 + x2 for x1,x2 in zip(it1,it2) ]
[3, 104, 205, 306, 407]

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

for apple1, apple2, orange in zip(apples, oranges, more_apples): ...

Следовательно, мне было интересно, существует ли шаблон, который допускает что-то похожее на

for apple1 in apples,\
    apple2 in oranges,\
    orange in more_apples: ...

, где такие ошибки были бы более очевидными.

Для понимания списка существует похожий синтаксис, но он соответствует itertools.product(), а не zip().

1 Ответ

0 голосов
/ 25 сентября 2019

А как же:

[100 * it1[i] + it2[i] for i in range(min(len(it1), len(it2)))]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...