按顺序迭代列表中的每个值,从随机值开始

jdf*_*jdf 5 python iteration list python-2.7

给出以下代码:

length = 10
numbers = [x for x in range(length)]    
start_index = randint(0,length-1)
# now output each value in order from start to start-1 (or end)
# ex. if start = 3 --> output = 3,4,5,6,7,8,9,0,1,2
# ex if start = 9 ---> output = 9,0,1,2,3,4,5,6,7,8
Run Code Online (Sandbox Code Playgroud)

什么是最好/最简单/最pythonic /最酷的方式迭代列表并按顺序打印每个值,从start开始并包装到start-1或者如果随机值为0则结束.

防爆.start = 3然后输出=3,4,5,6,7,8,9,1,2

我可以想到一些丑陋的方式(尝试,除了IndexError之外),但寻找更好的东西.谢谢!

编辑:更清楚的是start是从索引值开始的

Del*_*gan 5

您应该使用%(modulo)运算符.

length = 10
numbers = [x for x in range(length)]    
start = randint(0, length)

for i in range(length):
    n = numbers[(i + start) % length]
    print(n)
Run Code Online (Sandbox Code Playgroud)


Cor*_*mer 3

>>> start = randint(0, len(numbers))
>>> start
1
Run Code Online (Sandbox Code Playgroud)

您可以使用列表切片然后对其进行迭代

>>> numbers[start:] + numbers[:start]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
Run Code Online (Sandbox Code Playgroud)

%您还可以在列表理解中使用模运算符

>>> [numbers[i%len(numbers)] for i in range(start, start + len(numbers))]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
Run Code Online (Sandbox Code Playgroud)