Python 在给定的翻转次数中查找特定数量的头部和尾部的所有组合

Python 在给定的翻转次数中查找特定数量的头部和尾部的所有组合,python,itertools,Python,Itertools,我正在尝试计算所有可能的硬币投掷次数组合,现在使用10作为我的测试用例。我相信这是笛卡尔积,但我上的最后一节数学课是很久以前的事了。然而,我想先计算最可能的分布。这是我开始使用的代码: import itertools for x in itertools.product(['H','T'],repeat=10): print(x) 这将给我所有可能的10枚硬币的组合。但第一个结果是所有人都是人头,这不太可能。我的想法是从均匀分布开始,所有5个正面和5个反面的组合,然后继续使用4个正面

我正在尝试计算所有可能的硬币投掷次数组合,现在使用10作为我的测试用例。我相信这是笛卡尔积,但我上的最后一节数学课是很久以前的事了。然而,我想先计算最可能的分布。这是我开始使用的代码:

import itertools
for x in itertools.product(['H','T'],repeat=10):
    print(x)
这将给我所有可能的10枚硬币的组合。但第一个结果是所有人都是人头,这不太可能。我的想法是从均匀分布开始,所有5个正面和5个反面的组合,然后继续使用4个正面和6个反面(加上反比),3个正面和7个反面(加上反比),等等。但是,我不太确定是否可以使用itertools或其他内置模块或模块组合来实现这一点

如果我使用这个:

import itertools
for x in itertools.permutations(['H','H','H','H','H','T','T','T','T','T']):
    print(x)

然后有很多重复,因为它认为每个“H”和“T”都是唯一的。关于如何解决这个问题有什么建议吗?

这就是你想要的吗

从itertools导入组合并替换
对于带替换的梳齿组合(T、H、r=10):
打印(梳子)
输出:

('T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T')
('T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'H')
('T', 'T', 'T', 'T', 'T', 'T', 'T', 'T', 'H', 'H')
('T', 'T', 'T', 'T', 'T', 'T', 'T', 'H', 'H', 'H')
('T', 'T', 'T', 'T', 'T', 'T', 'H', 'H', 'H', 'H')
('T', 'T', 'T', 'T', 'T', 'H', 'H', 'H', 'H', 'H')
('T', 'T', 'T', 'T', 'H', 'H', 'H', 'H', 'H', 'H')
('T', 'T', 'T', 'H', 'H', 'H', 'H', 'H', 'H', 'H')
('T', 'T', 'H', 'H', 'H', 'H', 'H', 'H', 'H', 'H')
('T', 'H', 'H', 'H', 'H', 'H', 'H', 'H', 'H', 'H')
('H', 'H', 'H', 'H', 'H', 'H', 'H', 'H', 'H', 'H')
从进口。这将计算252个置换(10!/5!/5!)

编辑:OP提到,在某些情况下,这可能超过递归限制。下面是一些计算,事实上,多集置换的项数可能会增加很多。我想你需要知道你的电视机有多大

>>> from math import comb
>>> '{:,}'.format(comb(50,25))
'126,410,606,437,752'
>>> '{:,}'.format(comb(20,10))
'184,756'
>>> '{:,}'.format(comb(10,5))
'252'

这与OP描述的不一样。唯一的问题是,多集置换是递归的,并且在大型集合中会失败:
RecursionError:相比之下超过了最大递归深度。
@user2328273感谢更新,我没有意识到这一点,尽管我想不出可能的替代方法。@user2328273我编辑了我的用一些描述性的数字回答(在结尾)。我想必须考虑多集置换的极限。如果可以创建生成器,则可以避免此限制。
>>> from math import comb
>>> '{:,}'.format(comb(50,25))
'126,410,606,437,752'
>>> '{:,}'.format(comb(20,10))
'184,756'
>>> '{:,}'.format(comb(10,5))
'252'