我有一个整数列表: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 0
和N - 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 + 1
和 N + 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/