В 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()
.