如何随机选择列表中排除一种可能性的项目?

Don*_*nji 4 python list

除了列表中的给定项目之外,从列表中随机选择项目的最简单方法是什么?

例子: list = [2, 4, 5, 7, 9, 34, 54,]

如何随机选择除 7 之外的任何数字?

Thi*_*lle 10

可能有两种主要策略:

从列表中删除异常,并从中采样:

import random

def choice_excluding(lst, exception):
    possible_choices = [v for v in lst if v != exception]
    return random.choice(possible_choices)
Run Code Online (Sandbox Code Playgroud)

或者只是从完整列表中随机选择,只要获得禁止值(拒绝采样)就重试:

def reject_sample(lst, exception):
    while True:
        choice = random.choice(lst)
        if choice != exception:
            return choice
Run Code Online (Sandbox Code Playgroud)

两者都会得到相同的结果(好吧,只要随机的结果相同......):

lst = [2, 4, 5, 7, 9, 34, 54]
choice_excluding(lst, 7)
# 9
reject_sample(lst, 7)
# 54
Run Code Online (Sandbox Code Playgroud)

根据列表的大小,其中一个可能比另一个更快。尝试看看!