Как перебрать два списка и перезапустить второй, пока не закончится первый - PullRequest
5 голосов
/ 08 февраля 2020

По сути, у меня есть эти 2 списка

listone = ['a', 'b', 'c', 'd', 'e', 'f', 'j']
listtwo = ['1', '2', '3']

И я хочу перебирать оба списка синхронно и всякий раз, когда заканчивается самый короткий список (в данном случае listtwo), снова запускается до тех пор, пока listone не будет завершен. Пример:

a 1
b 2
c 3
d 1
e 2
f 3
j 1

Как это.

Ответы [ 3 ]

8 голосов
/ 08 февраля 2020

вы можете использовать itertools.cycle :

from itertools import cycle

for i, j in zip(listone, cycle(listtwo)):
    print(i, j)

вывод:

a 1
b 2
c 3
d 1
e 2
f 3
j 1
4 голосов
/ 08 февраля 2020

Без itertools.cycle() или без создания дополнительного списка:

listone = ['a', 'b', 'c', 'd', 'e', 'f', 'j']
listtwo = ['1', '2', '3']
N = len(listtwo)

for index, elem in enumerate(listone):
    elem2 = listtwo[index % N]
    print(elem, elem2)
1 голос
/ 08 февраля 2020
from math import ceil
listone = ['a', 'b', 'c', 'd', 'e', 'f', 'j']
listtwo = ['1', '2', '3']
listtwo_augmented = listtwo * ceil(len(listone)/len(listtwo))
for e1, e2 in zip(listone, listtwo_augmented):
    print(e1, e2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...