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

4 投票
4 回答
3802 浏览
提问于 2025-04-16 19:52

所以,我在寻找一种方法,可以像用for循环那样遍历一个项目列表,但我希望这个循环是以“随机”的方式进行的。也就是说,我不想让循环按顺序走0,1,2,3,...n,我想让它以某种随机的顺序来选择,并且仍然能遍历所有的项目。

这是我目前的循环代码:

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

如果这段话不太明白,请告诉我;)

4 个回答

1

在编程中,有时候我们需要把一些代码放在一起,这样可以让代码更整洁,也更容易管理。比如说,如果你有一段代码需要重复使用,或者你想把一些功能分开处理,这时候就可以用“函数”来帮忙。函数就像一个小工具箱,你可以把常用的工具放进去,想用的时候直接拿出来用就行了。

当你定义一个函数时,你可以给它起个名字,这样在需要的时候就可以通过这个名字来调用它。这样不仅可以减少重复的代码,还能让你的程序看起来更清晰。

另外,函数还可以接收一些输入,这些输入叫做“参数”。你可以把不同的参数传给函数,让它根据这些参数来做不同的事情。就像你给一个厨师不同的食材,他可以做出不同的菜。

总之,函数是编程中非常重要的一个概念,它能帮助你更好地组织代码,让你的程序更高效、更易于维护。

import random
random.shuffle(listOfItems)

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

如果性能不是特别重要,你可以简单地打乱你的项目顺序。或者,如果这些项目必须保持原来的顺序,你可以先创建一个所有索引的列表,然后打乱这个索引列表。比如说,你可以用这样的代码:indizes = range(len(listOfItems)),然后用 random.shuffle(indizes) 来打乱索引。

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

撰写回答