创建不包括列表中数字的随机数

Mah*_*yar 0 python python-2.7

所以假设我有一个数字列表(不是一个特定的范围,可能会改变),并且想要生成一个随机数来排除列表中的数字。

排除的数字列表来自 sql 查询。

随机数的唯一限制是位数,可以来自:

random_number = ''.join(random.choice(chars) for _ in range(size))
Run Code Online (Sandbox Code Playgroud)

所以我想生成不包括数字列表的随机数(有大小限制)。

while random_number in exclude_list:
    random_number = ''.join(random.choice(string.digits) for _ in range(size))
Run Code Online (Sandbox Code Playgroud)

有没有一种pythonic方式(除了使用while循环)来做到这一点?

示例:生成一个 2 位随机数,该数不存在于诸如 exclude_list=[22,34,56,78] 之类的数字列表中

Moi*_*dri 6

您可以调用random.choiceusingset来排除列表中您不想成为随机选择的一部分的项目:

>>> import random

>>> my_list = [1, 2, 3, 4, 5, 6, 7]
>>> exclude_list = [3, 6, 7]

# list containing elements from `my_list` excluding those of `exclude_list`
>>> valid_list = list(set(my_list) - set(exclude_list))

>>> random.choice(valid_list)
5  # valid random number
Run Code Online (Sandbox Code Playgroud)