Запустите 2 переменные в l oop, где значение одной больше - PullRequest
0 голосов
/ 20 февраля 2020

Как я могу запустить l oop, где мне нужно 2 переменные с диапазоном, где значение 1 переменной больше, чем другие. Например,

x = 3
y = 4

for x_val, y_val in zip(range(x), range(y)):
    print(x_val)
    print(y_val)

Я хочу, чтобы y запускался 4 раза, а не останавливался на 3, поскольку значение x равно 3.

Примечание. Это упрощенный пример того, что мне нужно. Я знаю, что мы можем печатать только x_val и не нужен y_val. Но я хочу иметь 2 переменные (x_val, y_val), основанные на переменных цикла для разных функций.

Ответы [ 3 ]

4 голосов
/ 20 февраля 2020

Вы можете использовать izip_longest в python2 и zip_longest для python3.

from itertools import zip_longest
x = 3
y = 7

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

Если итерации имеют неравную длину пропущенные значения заполняются значением заполнения. Итерация продолжается до тех пор, пока не будет исчерпана самая длинная итерация.

РЕДАКТИРОВАТЬ:

fillvalue до последнего значения самой большой итерации.

x=3
y=4
for x,y in zip_longest(range(x),range(y),fillvalue=range(x)[-1] if x>y else range(y)[-1]):
    print(x,y)

вывод:

0 0
1 1
2 2
6 3
6 4
6 5
6 6
0 голосов
/ 20 февраля 2020

проблема в функции ZIP, потому что по умолчанию останавливается в кратчайшем диапазоне. Так что при x = 3. Но вы можете решить эту проблему, импортировав и используя этот модуль izip_longest

0 голосов
/ 20 февраля 2020

zip - это то, что заставляет ваши итерации останавливаться на 3. По умолчанию он останавливается на кратчайшем диапазоне.

...