如何构建这个嵌套for循环?

时间:2016-01-26 23:39:13

标签: python loops for-loop nested-loops

我正在尝试使用嵌套的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。

4 个答案:

答案 0 :(得分:7)

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)

答案 1 :(得分:1)

range(42,43)仅提供[42]。将其更改为for i in (42,43):

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

答案 2 :(得分:1)

您可以使用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)

答案 3 :(得分:0)

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