2024-09-27 00:20:28 发布
网友
我一直在尝试使用excel解决以下问题,并意识到这可能更适合Python,但是我不确定从哪里开始,我只对Python有基本的了解。你们怎么解决这个问题?在
有6种咖啡和10种口味的咖啡,你可以在每种咖啡里放一杯、两杯或三杯。基于这一点,我想知道(并列出)独特的风味组合,以及你不喝同一杯咖啡能坚持多久。在
>>> 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。在
coms
当添加到咖啡中时,口味组合的数量只是6 * 175 = 1050。在
6 * 175 = 1050
另外(顺便说一句),你甚至不需要通过编程来实现这一点。假设你有n个元素,你想计算出有多少种方法可以从中选出k,那么这个数字由Binomial coefficient给出,这个数字可以用C(n, k) = n!/(k!*(n-k)!)很容易计算出来
C(n, k) = n!/(k!*(n-k)!)
在你的例子中,你有n=10,k=1,k=2,k=3。因此,您的解决方案是:
这听起来像是itertools.product的工作:
将咖啡定义为:
coffee = ["C1","C2","C3","C4","C5","C6"]
和风味拍摄为:
一种口味:
两种口味:
[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]]
我认为这是正确的。我们建立了所有的1,2,3元组组合的咖啡口味,并把它们链在一起成为一个单一的iterable。然后我们把每种口味和每一种咖啡结合在一起。在
使用^{} 你可以很容易地得到所有不同的风味组合:
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的工作:
将咖啡定义为:
和风味拍摄为:
^{pr2}$一种口味:
^{3}$两种口味:
三味丸:
相关问题 更多 >
编程相关推荐