python - 从不包含一个特定索引的列表中生成一个随机索引

标签 python random

我有一个整数列表:l = [1,2,3,4]

对于这个列表中的每个元素,我需要随机选择一个不同的元素并对其执行一些操作:

for i in range(len(l)):
   idx = # a random index which is NOT equal to i
   # do something with the element at idx

我对 Python 还是很陌生,无法确定是否有办法在不求助于生成随机索引的循环的情况下执行此操作,并且仅在随机数不等于 i 时才停止循环。任何建议将不胜感激。

最佳答案

如何:生成一个介于1 0N - 1 之间的随机数(N 是在本例中为列表的长度),如果该数字等于或大于 i,则将其加一。

for i in range(len(l)):
    idx = random.randrange(len(l) - 1)
    idx = idx + 1 if idx >= i else idx
    # do stuff with idx

这样,滚动到 i 上方的所有数字都“向上”移动:

       0      i          N
before *****************
after  ******* **********

或者,您可以在一行中生成一个介于1 i + 1N + i 之间的数字,然后将该数字取模N,有效地将其环绕在列表末尾之后:

    idx = random.randrange(i + 1, len(l) + i) % len(l)

       0      i          N
before         *****************
after  ******* **********

1) 这里的意思是包括下界,不包括上界,使用randrange

关于python - 从不包含一个特定索引的列表中生成一个随机索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45106084/

相关文章:

python - 如何避免在 webapp 模板中硬编码 url

python - 如何使用 dateutil.tz.tz.tzoffset 来本地化使用 strptime 创建的时区原始日期时间?

python - 奇怪的描述符行为

algorithm - 如何实现伪随机函数

c# - 在 for 循环中随机生成一个 int 值。 7 次迭代后,它返回一个非常大的负数。为什么是这样?

python - 使用 Django 为 Dojo 的 JsonRestStore 实现 Restful 服务器 - 哪些工具适合这项工作?

python - 如何用 DEAP 产生不同的随机结果?

c++ - 随机游走 - 布朗运动

python - 使用 Numpy 生成 N 维矩阵

python - frozenset() - 何时可以使用它们的示例