Python - 以非线性方式运行循环

时间:2011-06-19 16:25:24

标签: python list for-loop

SO, 我正在寻找一种以循环方式循环遍历项目列表的方法,除了我希望循环以“随机”方式迭代。即我不希望循环进入0,1,2,3,m + 1 ... n,我希望它以一些随机顺序选择它并仍然遍历所有项目的循环。

这是我当前的循环代码:

for singleSelectedItem in listOfItems:
  item = singleSelectedItem.databaseitem
  logging.info(str(item))    

请告诉我这是否有意义;)

4 个答案:

答案 0 :(得分:9)

如果可以改组listOfItems,那么

import random
random.shuffle(listOfItems)
for singleSelectedItem in listOfItems:
    blahblah

,否则

import random
randomRange = range(len(listOfItems))
random.shuffle(randomRange)
for i in randomRange:
    singleSelectedItem = listOfItems[i]
    blahblah

在评论中编辑Jochen Ritzel的更好方法 否则部分可以是

import random
for item in random.sample(listOfItems, len(listOfItems))
    blahblah

答案 1 :(得分:1)

import random
random.shuffle(listOfItems)

for singleSelectedItem in listOfItems:
  item = singleSelectedItem.databaseitem
  logging.info(str(item))

答案 2 :(得分:1)

如果表现不是那么重要你可以随便洗牌,或者如果那些必须保持相同的顺序,创建一个所有indizes和shuffle的列表(例如indizes = range(len(listOfItems)),随机.shuffle(indizes))

答案 3 :(得分:0)

>>> lst = ['a', 'b', 'c', 'd']
>>> nums = list(range(0, len(lst)))
>>> import random
>>> random.shuffle(nums)
>>> for i in nums:
...     print lst[i]
c
a
b
d

或者如果列表非常大,您可以使用一些生成器调味。 : - )