列表中的随机元素

时间:2017-06-08 11:31:01

标签: python python-2.7 list random

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

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

如果您需要表现,您还可以在0len(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