python-3.x - 用另一个变量循环一个变量范围
问题描述
我需要循环遍历 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)
但这没有多大意义。
解决方案
您不需要 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
推荐阅读
- c - 如何判断 C 文件中缺少哪些定义,而不是通过编译失败?
- java - 动态 JPA 计数查询未响应
- vaadin - Vaadin 设计器在 Java 代码中为垂直布局组件生成“元素”类
- r - 具有许多类别的ggplot
- algorithm - 1D Candy Crush(如何删除大于 3 的连续相同序列?)
- flutter - LateInitializationError 颤动
- javascript - 猫鼬模式错误:未定义的“类型”
- conditional-statements - 如何在 PDDL 中设置条件?
- powershell - Invoke-WebRequest 使用 SSO 从 Salesforce 下载 csv 文件
- salesforce - 翻译 Salesforce 案例摘要