数组索引在Python中随机启动

时间:2014-08-20 16:53:25

标签: python arrays

我需要访问数组中的项目,开始索引随机。

我的代码

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'

4 个答案:

答案 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

另一个选项是cycleislice

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']