首页 > 解决方案 > 用另一个变量循环一个变量范围

问题描述

我需要循环遍历 2 个变量并循环遍历 2 个变量中的 1 个变量(以较大者为准),直到最后一个(最长)的范围。例如

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)

但这没有多大意义。

标签: python-3.xitertools

解决方案


您不需要 zip 最长,您为两个数字中的较小者创建一个无限循环,然后为较大的数字创建正常范围。这样,最小范围将是无限的,最大范围将是有限范围。

您可以简单地使用普通拉链穿过它们,直到到达非无限范围的末端。

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 总是首先输出。

输出 x=2, y=3

0
0
1
1
0
2

输出 x=3 y=2

0
0
1
1
2
0

推荐阅读