【问题标题】:How do I structure this nested for loop?如何构造这个嵌套的 for 循环?
【发布时间】:2016-05-03 17:48:37
【问题描述】:

我正在尝试使用嵌套的 for 循环来打印值 192.168.42.0-255 和 192.168.43.0-255。

for i in range(42, 43):
    for y in range(0, 255):
        ip = "192.168." + str(i) + "." + str(y)
        print ip

所有正在打印的都是值 192.168.42.0-255。它似乎没有更改为 192.168.43。

【问题讨论】:

  • 您也可以在外循环中使用可迭代对象,例如for i in (42, 43): ...

标签: python loops for-loop nested-loops


【解决方案1】:

range(x,y) 不包括 y。

>>> range(42,43)
[42]

您的代码可以通过将第一个代码更改为range(42,44) 并将第二个代码更改为range(0,256)(或只是range(256))来修复。

如果您想完全摆脱嵌套循环,可以使用生成器表达式:

for ip in ('192.168.{}.{}'.format(i,j) for i in (42,43) for j in range(256)):
    print(ip)

【讨论】:

  • 最后一个解决方案展示了 Python 之美!
【解决方案2】:

range(42,43) 只给出[42]。将其更改为仅for i in (42,43):

正如@timgeb 指出的那样,您的第二个循环应该是range(0, 256) 或只是range(256);不是 255。

【讨论】:

    【解决方案3】:

    如果你想使用 range(a,b),那么它应该是 range(42,44) 而不是 43。

    【讨论】:

      【解决方案4】:

      您可以使用itertools.product() 将数字组组合在一个循环中:

      from itertools import product
      
      ips = ('192.168.{}.{}'.format(*pair) for pair in product((42, 43), range(256)))
      for ip in ips:
          print(ip)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-17
        • 2020-06-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多