SO, 我正在寻找一种以循环方式循环遍历项目列表的方法,除了我希望循环以“随机”方式迭代。即我不希望循环进入0,1,2,3,m + 1 ... n,我希望它以一些随机顺序选择它并仍然遍历所有项目的循环。
这是我当前的循环代码:
for singleSelectedItem in listOfItems:
item = singleSelectedItem.databaseitem
logging.info(str(item))
请告诉我这是否有意义;)
答案 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
或者如果列表非常大,您可以使用一些生成器调味。 : - )