【问题标题】:Nested ranges only working for the last range嵌套范围仅适用于最后一个范围
【发布时间】:2020-10-17 20:50:18
【问题描述】:

这里绝对是初学者,所以如果某些术语使用不正确,我深表歉意。我试图同时运行多个范围,直到其中一个达到目标。我尝试嵌套它们,但发生的事情是只有最后一个范围朝着目标工作,而其他范围则停留在 1。 为了澄清我希望 x1 打印出 3,6,9,12..,x2 打印出 2,4,6,8.. 和 x3 打印出 1,2,3,4... 相反,x1 和 x2 仅打印 1,1,1,1...,并且只有 x3 正确打印为 1,2,3,4,...

range1 = (range(0, 100000000000000000000, 3))
range2 = (range(0, 100000000000000000000, 2))
range3 = (range(0, 100000000000000000000, 1))
for x1 in range1:
    for x2 in range2:
        for x3 in range3:

            if x1 == 1358445000:
                print ("x1=", x1)
                break
            if x2 == 1358445000:
                print ("x2=", x2)
                break
            if x3 == 1358445000:
                print ("x3=", x3)
                break

            else:
                print (x1)
                print (x2)
                print (x3)

【问题讨论】:

  • 您需要将它们全部循环在一起。见zip
  • 你有嵌套循环,这就是你观察的原因。就像彼得评论的那样,zip 可能是您的解决方案:for x1, x2, x3 in zip(range, range2, range3):

标签: python python-3.x if-statement nested range


【解决方案1】:

zip 将帮助您解决问题:

range1 = range(0, 100000000000000000000, 3)
range2 = range(0, 100000000000000000000, 2)
range3 = range(0, 100000000000000000000, 1)


for x1, x2, x3 in zip(range1, range2, range3):
    if x1 == 1358445000:
        print("x1=", x1)
        break
    if x2 == 1358445000:
        print("x2=", x2)
        break
    if x3 == 1358445000:
        print("x3=", x3)
        break
    else:
        print(x1)
        print(x2)
        print(x3)

请注意,zip 迭代将在最短的迭代处停止。您可能还想看看来自itertools 包的zip_longest

【讨论】:

  • 括号前不要使用空格。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-24
  • 2011-01-01
  • 2010-12-18
  • 2018-05-23
  • 1970-01-01
相关资源
最近更新 更多