【问题标题】:Create random number excluding numbers in a list创建不包括列表中数字的随机数
【发布时间】:2017-01-13 21:40:40
【问题描述】:

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

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

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

random_number = ''.join(random.choice(chars) for _ in range(size))

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

while random_number in exclude_list:
    random_number = ''.join(random.choice(string.digits) for _ in range(size))

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

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

【问题讨论】:

  • 排除号码列表有多大?包含的数字列表有多大?
  • 排除号码列表来自sql查询,所以不是固定长度。
  • 我认为您也需要包含范围,从-infinity+infinity 的随机数除了您列表中的随机数会很困难。
  • 如果您表明您已经为自己解决问题付出了一些努力,您将更有可能获得有用的回复。如果有,请在问题中添加您尝试过的内容。
  • 你的编辑让我更加困惑。您要生成随机数的范围是多少?通过排除列表,您的意思是列表中的数字应该作为随机数生成,或者排除列表中的数字不应该是随机生成的数字的一部分?

标签: python python-2.7


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2011-07-12
    • 1970-01-01
    • 1970-01-01
    • 2014-01-11
    • 1970-01-01
    • 2018-09-10
    • 1970-01-01
    • 2021-10-28
    • 1970-01-01
    相关资源
    最近更新 更多