python中有没有办法从列表中选择一个随机元素而不考虑当前元素?
换句话说,我想这样做
L=[1,2,3,4,5,6,7,8,9,10]
i=0
while(i<len(L):
random.choice(L-L[i])
i+=1
例如,在迭代 0 时,我不希望元素 1 并且在迭代 1 我不希望元素 2 。
答案 0 :(得分:4)
您可以根据切片创建新列表:
L = [1,2,3,4,5,6,7,8,9,10]
i = 0
while i < len(L):
random.choice(L[:i] + L[i+1:]) # L without the i-th element
i += 1
或者只是绘制一个随机索引,直到您绘制的索引不等于i
:
while i < len(L):
while True:
num = random.randrange(0, len(L)) # draw an index
if num != i: # stop drawing if it's not the current index
break
random_choice = L[num]
i += 1
如果您需要表现,您还可以在0
和len(L)-1
之间绘制一个索引,如果它等于或高于i
,则将其递增1。这样您就不需要重新绘制并且排除了i
索引:
while i < len(L):
idx = random.randrange(0, len(L) - 1)
if idx >= i:
idx += 1
random_choice = L[idx]
i += 1
答案 1 :(得分:0)
你必须选择当前索引以外的随机元素,然后你可以试试这个
l=[i for i in range(1,11)]
from random import random
for i in l:
while 1:
tmp= int(random() * 10)
if tmp!=i:
print tmp
break