试图找到所有可能的组合和组合

2024-09-27 00:20:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在尝试使用excel解决以下问题,并意识到这可能更适合Python,但是我不确定从哪里开始,我只对Python有基本的了解。你们怎么解决这个问题?在

有6种咖啡和10种口味的咖啡,你可以在每种咖啡里放一杯、两杯或三杯。基于这一点,我想知道(并列出)独特的风味组合,以及你不喝同一杯咖啡能坚持多久。在


Tags: excel意识咖啡风味口味
3条回答
>>> flavor = ["F1","F2","F3","F4","F5","F6","F7","F8","F9","F10"]
>>> coffee = ["C1","C2","C3","C4","C5","C6"]
>>> from itertools import product, combinations, chain
>>> len(list(product(coffee, chain(combinations(flavor, 1), combinations(flavor, 2), combinations(flavor, 3)))))
1050
>>> list(product(coffee, chain(combinations(flavor, 1), combinations(flavor, 2), combinations(flavor, 3))))
[('C1', ('F1',)), ('C1', ('F2',)), ('C1', ('F3',)), ('C1', ('F4',)), ('C1', ('F5',)), ('C1', ('F6',)), ('C1', ('F7',)), ('C1', ('F8',)), ('C1', ('F9',)), ('C1', ('F10',)), ('C1', ('F1', 'F2')), ('C1', ('F1', 'F3')), ('C1', ('F1', 'F4')), ('C1', ('F1', 'F5')), ('C1', ('F1', 'F6')), ('C1', ('F1', 'F7')), ('C1', ('F1', 'F8')), ('C1', ('F1', 'F9')), ('C1', ('F1', 'F10')), ('C1', ('F2', 'F3')), ...

我认为这是正确的。我们建立了所有的1,2,3元组组合的咖啡口味,并把它们链在一起成为一个单一的iterable。然后我们把每种口味和每一种咖啡结合在一起。在

使用^{}你可以很容易地得到所有不同的风味组合:

from itertools import combinations

shots = range(1,11)
N = 3

coms = [c for n in range(1, N+1) for c in combinations(shots, n)]

coms的长度将给出组合的数量,在6种口味和1、2或3次的情况下,这是175。在

当添加到咖啡中时,口味组合的数量只是6 * 175 = 1050。在

编辑

另外(顺便说一句),你甚至不需要通过编程来实现这一点。假设你有n个元素,你想计算出有多少种方法可以从中选出k,那么这个数字由Binomial coefficient给出,这个数字可以用C(n, k) = n!/(k!*(n-k)!)很容易计算出来

在你的例子中,你有n=10,k=1,k=2,k=3。因此,您的解决方案是:

^{pr2}$

这听起来像是itertools.product的工作:

将咖啡定义为:

 coffee = ["C1","C2","C3","C4","C5","C6"]

和风味拍摄为:

^{pr2}$

一种口味:

^{3}$

两种口味:

 [i for i in itertools.product(coffee,flavor,flavor) if i[1] != i[2]]

三味丸:

 [i for i in itertools.product(coffee,flavor,flavor, flavor) if i[1] != i[2] and i[2] != i[3] and i[1] != i[3]]

相关问题 更多 >

    热门问题