我需要访问数组中的项目,开始索引随机。
我的代码
from random import randrange
fruits = ['banana', 'apple', 'mango']
index = randrange(len(fruits))
for index in fruits[index:]:
print index
当索引为1或2之后,可以在索引0或1中再次打开该循环。
示例:
Randon指数为1 print ='apple''mango''banana'
Randon指数是2 print ='mango''apple''banana'
答案 0 :(得分:2)
试试这个
from random import randrange
fruits = ['banana', 'apple', 'mango']
randomOffset = randrange(0,len(fruits))
for i in range(len(fruits)):
print fruits[i - randomOffset]
你可以使用(i + randomOffset) % len(fruits)
的索引更清楚,但是在python中给出一个负索引是从数组的后面开始并向后计数。所以实际上,你只是在数组中随机出发 - 由randomOffset
设置,然后再跟随后续项目。
答案 1 :(得分:2)
为此操作构建了一个deque:collections.deque
您可以创建双端队列并旋转它,而不是使用fruits[index:]
:
from collections import deque
fruit_deque = deque(fruits)
fruit_deque.rotate(-index)
for fruit in fruit_deque:
print fruit
from itertools import cycle, islice
fruit_cycle = cycle(fruits)
fruit_slice = islice(fruit_cycle, index, index + len(fruits))
for fruit in fruit_slice:
print fruit
您可以使用此方法多次环绕,将len(fruits)
替换为任意数字(或使用islice(fruit_cycle, index, None)
无限循环)。
答案 2 :(得分:2)
看起来您只是试图以随机顺序访问列表(因为您的两个示例输出不是原始列表的两次旋转)。
在这种情况下,我可以建议random.shuffle
吗?
import random
randlist = fruits[:]
random.shuffle(randlist)
for i in randlist:
print i
以随机顺序打印列表。
答案 3 :(得分:1)
您可以避免使用for循环并拼接到index
然后反转大于index
>>> fruits = ['banana', 'apple', 'mango']
>>> index = 0
>>> fruits[index:] + fruits[:index][::-1]
['banana', 'apple', 'mango']
>>> index = 1
>>> fruits[index:] + fruits[:index][::-1]
['apple', 'mango', 'banana']
>>> index = 2
>>> fruits[index:] + fruits[:index][::-1]
['mango', 'apple', 'banana']