gpt4 book ai didi

python - 根据N个数字类型选择10个项目

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:39:54 25 4
gpt4 key购买 nike

我正在编写一个程序,它必须从数据库中随机选择 10 个项目。标准是它的类型应该基于用户的选择。

所以如果用户选择type 1程序必须选择 10 itemstype 1

如果用户选择type 1 and 2程序必须选择 5 items来自 type 15 items来自 type 2

如果用户选择type 1 , 2 and 4程序必须选择 3 items对于 each type其中一种类型必须有 and extra item获得 10 个项目以及哪种类型获得额外的问题必须是随机的。

因此必须为用户可以选择的 N 种类型执行此操作。

关于实现这一目标的方式有什么建议吗?

顺便说一句,我正在尝试构建一个随机生成器,因此每次的结果都必须是随机的。

Ps: 我是用 python 编码的,但是任何语言代码都可以。

PS:我已经能够使用 SQL WHERE 子句选择项目,这不是真正的问题。

问题是,一旦我获得了每种选定类型的元素,我必须准确选择 10 件具有上述比例的元素,(即):如果选择 4 种类型,每种类型 2 件元素,以及正好 2 件额外元素在任何两种类型中。

最佳答案

一种方法是一次性扫描数据库,建立十个选择。这是一些伪代码:

  • 在整个数据库中查询符合用户条件的记录
  • 建立结果列表中遇到的前十个
  • 如果出现任何其他记录,随机决定是否包含它(应包含第 n 个项目,概率为 P(10/n)): if random() < 10.0 / n: ...
  • 如果要包含,随机选择一个以前的选择换出:i = randrange(10)

在 Python 中:

result = []
for n, row in enumerate(cursor.execute(user_query), 1):
if n <= 10:
result.append(row)
elif random() < 10.0 / n:
i = randrange(10)
result[i] = row

或者,如果数据库不可查询,很大,并且有很高比例的记录符合用户标准,您可以从整个数据库中随机选择记录,直到找到十个符合标准的唯一记录:

result = set()
while len(result) < 10:
record = random.choice(entire_db)
if record not in result and matches(record, user_criteria):
result.add(record)

后一种算法是 Python 自己的 random.sample() 函数使用的两种算法之一。

如果您可以运行查询并且匹配记录的数量可以容纳在内存中,那么整个事情可以归结为:

random.sample(list(cursor.execute(user_query)), 10)

关于python - 根据N个数字类型选择10个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7884577/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com