python for 循环最大值中的 range()

python range() in for loop maximum

如何在范围函数中指定最大值,使其在一定数量后恢复到开头?

即:

for i in range(253, 2):
    print i

Would print 253, 254, 255, 0 , 1, 2  

如果最大值为 255


编辑(阅读评论和答案后)

这应该行得通吧?

if start < end:
    list = [ i for i in range(start, end + 1 ) ]
else:
    list = [ i % 256 for i in range(start, end + 256 + 1 ) ]

回想起来,人们似乎更喜欢复杂而不是简单。为什么要使用 itertools 和其他复杂的构造,当它可以通过一个简单的循环完成时?

您想使用模运算(或时钟运算)。 https://en.wikipedia.org/wiki/Modular_arithmetic

如果要打印253, 254, 255, 0, 1, ..., 252,可以使用下面的代码。

for i in range(0, 256):
    print((253+i)%256)

您指定范围的方式存在一些问题。但是你可以这样做:

max_val = 255
for i in range(253, max_val+2):
    print i%max_val

但是由于 range 指定的最终值未包括在内,如果您希望打印 2,则需要执行 range(253, (max_val+1)+2)

如果您事先不知道范围结束值是否大于或小于范围起始值,您可以这样做

start = 253
end = 2 # +1 if you want the 2 to be printed
for i in range(start, end+(start>end and max_val or 0)):
    print i%max_val

如果我理解得很好,那不完全是 range 问题。

给定 2 个数字 minmax:

  • 如果 min < max,您需要 minmax
  • 之间的数字列表
  • 否则您想要从 min2550max
  • 的列表

这只是伪代码,但可能足以让您开始解决问题(使用一两次 range 调用)

将其分为两个范围:range1 = range(start, highest+1)range2 = range(end)。然后使用 itertools,你可以:

for i in it.chain(range1, range2):