Как l oop через два списка разной длины одновременно в Python - PullRequest
0 голосов
/ 20 января 2020

Я использую Python. Я создал два списка разной длины:

list_1 = [1, 2, 3, 4, 5];
list_2 = ['a', 'b', 'c'];

Я хочу распечатать пары цифр и букв в виде

"1a 2b 3c 4a 5b 1c 2a 3b 4c 5a 1b 2c 3a 4b 5c"`

до l oop через оба списка одновременно.

Следующее вложенное для l oop распечатывает пары как

"1a 1b 1c 2a 2b 2c 3a 3b 3c 4a 4b 4c 5a 5b 5c"`

, что не то, что я хочу:

for num in list_1:
    for letter in list_2:
        print(num, letter)

Ответы [ 2 ]

1 голос
/ 20 января 2020

Вот решение с использованием zip и itertools.cycle:

>>> a = [1, 2, 3, 4, 5]
>>> b = ['a', 'b', 'c']
>>> from itertools import cycle
>>> for _, x, y in zip(range(len(a) * len(b)), cycle(a), cycle(b)):
...     print(x, y)
... 
1 a
2 b
3 c
4 a
5 b
1 c
2 a
3 b
4 c
5 a
1 b
2 c
3 a
4 b
5 c

В качестве альтернативы можно использовать itertools.islice вместо range:

from itertools import cycle, islice

for x, y in islice(zip(cycle(a), cycle(b)), len(a) * len(b)):
    print(x, y)
0 голосов
/ 20 января 2020
>>> a = [1, 2, 3, 4, 5]
>>> b = ['a', 'b', 'c']
>>> for x, y in zip(a * len(b), b * len(a)):
        print(x, y)


1 a
2 b
3 c
4 a
5 b
1 c
2 a
3 b
4 c
5 a
1 b
2 c
3 a
4 b
5 c

...