如果超过最大值,则获取启动,停止和重启计数器之间的数字

时间:2018-12-04 18:08:25

标签: python

我的目标是获取介于startstop之间的所有数字。如果起点超过定义的最大值(restart_point),则应该再次从1开始

例如:

start = 4
stop = 8
restart_point = 12

结果应为:[4, 5, 6, 7, 8]

start = 9
stop = 3
restart_point = 12

结果应为:[9, 10, 11, 12, 1, 2, 3]

以下代码有效,但我发现它有点复杂。我会为替代解决方案感到高兴。

start = 10
stop = 3
restart_point = 12

if stop - start < 0:
  difference = restart_point - start + stop
else:
  difference = stop - start

numbers = []

r = 0
for i in range(difference + 1):
  val = i + start
  if val > restart_point:
    r += 1
    val = r
  numbers.append(val)

print(numbers)
# result -> [10, 11, 12, 1, 2, 3]

6 个答案:

答案 0 :(得分:3)

从您的简单示例中可以看出,我可以假设stop和start都在1到restart_point之间(含)。这样就足够简单了:

start, stop, restart_point = 10, 3, 12

if stop < start:
    stop += restart_point

numbers = []
for i in range(start-1, stop):
    val = i % restart_point + 1

    numbers.append(val)

print(numbers)

输出:

[10, 11, 12, 1, 2, 3]

答案 1 :(得分:2)

如果需要循环输入,请记住使用mod:

start = 9
stop = 3
restart_point = 12

while start % restart_point != stop:
    print(start % restart_point)
    start = start + 1

基于0索引,但很容易将其修改为基于1索引。留给你:)

答案 2 :(得分:0)

[i for i in range(start, stop+1)] if start<stop else [i for i in range(start, restart_point+1)] + [i for i in range(1, stop+1)]

答案 3 :(得分:0)

我想我会做这样的事情:

numbers = []
x = start

while x <= stop:
    if x > restart_point:
        x = 1
    numbers.append(x)
    x = x + 1

答案 4 :(得分:0)

start = 9
stop = 3
restart_point = 12
l = []
if restart_point > stop:
    l = l + [i for i in range(start,restart_point)] + [i for i in range(1, stop+1)]
else:
    l = l + [i for i in range(start, stop+1)]

print(l)

输出:

(python37) C:\Users\Documents>py test.py
[9, 10, 11, 1, 2, 3]

答案 5 :(得分:0)

这里是:

start, stop, restart_point = (10, 3, 12)
x = list(range(start, 1 + min(stop, restart_point))) + \
    list(range(start, 1 + (start>stop) * max(stop, restart_point))) + \
    list(range(1, 1 + (start>stop) *stop))
print(x)

输出

[10, 11, 12, 1, 2, 3]