python - 从列表中选择唯一值

标签 python random python-2.7 unique

我想做的是,有一个字符列表,每个字符都是一个过程,然后我想从这个列表中随机选择(或伪随机,这无关紧要),并执行该过程,然后我希望能够再次运行它,而不是获得相同的值,例如,如果我有五个值,我希望能够运行它 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[:]

关于python - 从列表中选择唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13017599/

相关文章:

linux - KSH密码生成器

python - 列索引器中的 bool 表达式 (Pandas) 'is' 运算符不起作用

python - Python纽约时报网络抓取错误(“bytes to string”)

python - 解码和unicode之间的区别?

c - 任意概率分布方式的随机数生成器

python - 如何动态删除DAG?

Python 3,使用请求(库)填写表单返回同一页面 HTML,无需输入参数

python - 张量板嵌入 : "parsing metadata" hangs

python - 记住python模式匹配中的多个字段

javascript - 在 Javascript 中显示来自数据库的图像链接 javascript 数组的 3 个随机图像