2017-06-08 4 views
1

Gibt es eine Möglichkeit in Python ein zufälliges Element aus einer Liste auszuwählen, ohne ein aktuelles Element zu berücksichtigen?Zufallselement aus einer Liste

Mit anderen Worten, ich mag diesen

L=[1,2,3,4,5,6,7,8,9,10] 
i=0 
while(i<len(L): 
    random.choice(L-L[i]) 
    i+=1 

Zum Beispiel tun, bei der Iteration Ich will nicht das Element haben und bei der Iteration Ich will nicht das Element haben .

Antwort

4

Sie könnten eine neue Liste erstellen, basierend auf Slicing:

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 

Oder einfach einen zufälligen Index ziehen, bis Sie einen Index, die nicht gleich i ist:

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 

Wenn Sie brauchen Leistung Sie könnten auch nur einen Index zwischen 0 und len(L)-1 zeichnen und es um 1 erhöhen, wenn es gleich oder höher als i ist. Auf diese Weise brauchen Sie nicht erneut zu ziehen und Index i ist ausgeschlossen:

while i < len(L): 
    idx = random.randrange(0, len(L) - 1) 
    if idx >= i: 
     idx += 1      
    random_choice = L[idx] 
    i += 1 
0

Alles, was Sie ein zufälliges Element anders als dem aktuellen Index wählen, dann können Sie diese versuchen

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 
Verwandte Themen