我的目标是获取介于start
和stop
之间的所有数字。如果起点超过定义的最大值(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]
答案 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]