Циклически изменяйте диапазон с другой переменной - PullRequest
1 голос
/ 27 февраля 2020

Мне нужно l oop через 2 переменные и циклически перебирать 1 переменную из 2 переменных (в зависимости от того, какая из них больше), пока диапазон 2-й (самой длинной) не истечет. Например,

x = 5 #input by user
y = 8 #input by user

for x_val, y_val in itertools.zip_longest(range(x), range(y), fillvalue='-'):
    print(x_val)
    print(y_val)

Ожидаемый результат

0
0
1
1
2
2
3
3
4
4
0
5
1
6
2
7

пробовал

x = 5
x_cyc = itertools.cycle(range(x))
y = 8

for x_val, y_val in itertools.zip_longest(range(x), x_cyc):
    print(x_val)
    print(y_val)

, но это не имело особого смысла.

1 Ответ

3 голосов
/ 27 февраля 2020

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

Вы можете просто использовать обычный zip для go через них, пока не достигнете конца бесконечного диапазона.

from itertools import cycle
x = 8
y = 5
min_range = cycle(range(min(x, y)))
max_range = range(max(x, y))

for x_val, y_val in zip(min_range, max_range):
    print(x_val)
    print(y_val)

ВЫХОД

0
0
1
1
2
2
3
3
4
4
0
5
1
6
2
7

ОБНОВЛЕНИЕ НА ОСНОВЕ КОММЕНТАРИЙ

Теперь значения x_val и y_val привязаны к диапазону x и y, а наименьшее из значений x или y будет циклически изменяться в диапазоне.

from itertools import cycle

x = 8
y = 5
x_range = range(x)
y_range = range(y)
if x > y:
    y_range = cycle(y_range)
elif y > x:
    x_range = cycle(x_range)

for x_val, y_val in zip(x_range, y_range):
    print(x_val)
    print(y_val)

Обратите внимание, что вывод теперь будет отличаться, когда x больше, чем y, или когда y больше, чем x, поскольку x всегда будет выводиться первым.

OUTPUT x = 2, y = 3

0
0
1
1
0
2

ВЫХОД x = 3 y = 2

0
0
1
1
2
0
...