Skip to main content
 首页 » 编程设计

python之从列表中选择唯一值

2025年05月04日12jackei

我想做的是,有一个字符列表,每个字符都是一个过程,然后我想从这个列表中随机选择(或伪随机,这无关紧要),并执行该过程,然后我希望能够再次运行它,而不是获得相同的值,例如,如果我有五个值,我希望能够运行它 5 次,然后第 6 次运行它时,它什么都不返回。这是代码:

from Tkinter import* 
from random import randint 
Characters=[Percy,Annabeth,Leo,Chuck,Sarah] 
Used = [] 
def callback(): 
    end = len(Characters)-1 
    rando = randint(0,end) 
    Characters[rando] 
    for i in Characters: 
         if Characters[rando] in Used: 
            print 'This has already been used' 
         else: 
            Characters[rando]() 
            Used.append(Characters[rando]) 
            break 
 
 
game = Tk() 
game.geometry('50x50+700+100') 
Button1 = Button(game,text = '1',command =lambda:callback() ) 
Button1.pack(side=LEFT) 
 
 
game.mainloop()  

我想得到

callback() 

要正常运行,我已经尝试过你看到的但我也尝试过

if Characters[rando] in Used: 
    print 'This has already been used' 
else:  
   Characters[rando] 
   Used.append(Characters[rando]) 

在这两种情况下,它都会多次运行相同的过程,例如,“Leo”可能会连续执行 3 次。我搜索了几个小时来寻找执行此操作的方法,但找不到。

请您参考如下方法:

首先,我将洗牌 Characters:

Characters = [Percy,Annabeth,Leo,Chuck,Sarah] 
random.shuffle(Characters) 

现在,当您运行回调时,您会弹出一个字符:

def callback(): 
    try: 
       C = Characters.pop()  #popping the last one is more efficient than the first. 
    except IndexError: 
       return None 
 
    return C() 

由于这会破坏 Characters,因此您可能需要保留一份副本以便在需要时重置:

 random.shuffle(Characters) 
 Characters_save = Characters[:] 
 
 def reset_characters(): 
     Characters[:] = Characters_save[:]