【问题标题】:Get random number from set deprecation从集合弃用中获取随机数
【发布时间】:2023-01-24 06:42:00
【问题描述】:

我正在尝试从一组唯一用户中随机获取 n 个用户。

这是我到目前为止所拥有的

users = set()

random_users = random.sample((users), num_of_user)

这很好用,但它给了我一个弃用的警告。我应该改用什么? random.choice 不适用于集合

更新

我试图获得对帖子的反应并希望它们是独一无二的,这就是我使用 set 的原因。为此坚持使用列表会更好吗?

users = set()
    for reaction in msg.reactions:
        async for user in reaction.users():
            users.add(user)

【问题讨论】:

  • 怎么样,random.choice(list(users), num_of_user)?
  • 你得到什么弃用警告?通常弃用警告会给你一个替代方案
  • 你得到什么信息?作为解决方法,您可以将您的集合转换为列表并将该列表传递给.sample()
  • 从 Python 3.9 开始弃用的集合中抽样,并将在后续版本中删除。 @阿尔伯特
  • 你能把你的集合变成一个列表吗? random_users = random.choices([*users],k=num_of_user)

标签: python python-3.x random set tuples


【解决方案1】:

将您的集合转换为列表。

  1. 通过使用 list 函数:

    random_users = random.choices(list(users),k=num_of_user)
    
  2. 通过使用 * 运算符到 unpack your set or dict

    random_users = random.choices([*users],k=num_of_user)
    

    解决方案 1. 比 2. 长 3 个字符,但解决方案 1. 对我来说更直白。

    不能保证通过不同的执行、python 版本和平台,您将获得相同的列表顺序结果,因此尽管随机数生成器进行了仔细的初始化,但您最终可能会得到不同的随机结果。要解决此问题,请订购您的清单。

    您还可以将用户存储在列表中,稍后使用 set 使元素唯一,然后再次转换为列表。为此,common way 将您的列表转换为集合,然后再次返回列表。

【讨论】:

  • 为什么不只是list(users)
  • len("[*users]") < len("list(users)"),但是,我更喜欢list,它似乎更容易理解。
【解决方案2】:

FWIW,Python 3.9.2 中的 random.sample() 在传递 dict 时表示:

TypeError: Population must be a sequence.  For dicts or sets, use sorted(d).

这个解决方案似乎适用于setdict 输入。

【讨论】:

  • 当你得到一个随机值时,为什么要对它进行排序?
猜你喜欢
  • 2022-01-22
  • 2020-06-16
  • 1970-01-01
  • 1970-01-01
  • 2011-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多