gpt4 book ai didi

python - itertools 组合与替换与限制

转载 作者:行者123 更新时间:2023-11-30 23:06:20 27 4
gpt4 key购买 nike

有没有更好的方法来列出所有可能的组合,并用每个元素的最小和最大出现次数进行替换,而不是(1)使用itertools.combinations_with_replacement()列出所有可能的组合,而没有这些限制itertools.combinations_with_replacement() 然后(2)一一检查结果是否满足限制?

举个例子,假设我有一个数组 [a b c],我想从中绘制 10 次,但我想查看每个元素至少 1 次,但不能再多次超过一半的时间(即5次),我不想看到以下内容

b b b b b c c c c c # no a
a a a a a a b b c c # a more than 5 times

我的真实数组更大,有 20 个元素,可以从中绘制 100 次...

提前致谢

编辑:

这是我尝试过的,但显然我的 20 个元素被绘制 100 次似乎效率不高......

a = []
for c in list(itertools.combinations_with_replacement(range(4), 10)):
valid = 1
for i in range(4):
if not c.count(i) or c.count(i) > 5:
valid = 0
break
if valid:
a.append(c)

我真正想做的是,我有 20 个项目,我想找出我可以从它们生成的所有可能的篮子,其中比例为增量整数(即 1%、2% 等,不1.5%),因此 100 倍加起来就是 100%。每个项目都应该始终出现,但其中任何一个都不应超过 50%...

最佳答案

这是我根据您发布的方法提出的建议:

至少查看所有元素一次:您可以从用一组元素填充的结果数组开始。

从这样的“种子”开始在一定程度上限制了检查和消除重复项的组合数量;它还简化了检查。

import itertools
a = []
seed = (0,1,2,3)
for c in itertools.combinations_with_replacement(range(4), 6):
valid = True
for i in range(4):
if c.count(i) > 4:
valid = False
break
if valid:
a.append(c+seed)
a

您可以创建一个生成器表达式(基于相同的原理):

import itertools
from collections import Counter
a = ((0,1,2,3) + c for c in itertools.combinations_with_replacement(range(4), 6) if max(Counter(c).values()) < 5)

关于python - itertools 组合与替换与限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32707571/

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