Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从数字列表中生成所有可能组合的百分比_Python_Python 3.x_Combinations - Fatal编程技术网

Python 从数字列表中生成所有可能组合的百分比

Python 从数字列表中生成所有可能组合的百分比,python,python-3.x,combinations,Python,Python 3.x,Combinations,我知道itertools.combines(iterable,r)返回元素列表/元组的组合(作为iterable)。如何围绕它构建一个只返回所有组合x%的函数?(我只需要一个元组列表,所以它不必是迭代器)。我希望如果有很少的组合,例如nCn,它应该返回所有(在本例中是一个)组合(因此最小值为1) 由于迭代器不携带其集合的长度信息,因此无法从中获取长度 在您的情况下,您可以使用公式n确定组合的大小/(k!(n-k)!)并迭代,直到您的百分比 例如: 来自math import factorial,

我知道
itertools.combines(iterable,r)
返回元素列表/元组的组合(作为iterable)。如何围绕它构建一个只返回所有组合x%的函数?(我只需要一个元组列表,所以它不必是迭代器)。我希望如果有很少的组合,例如nCn,它应该返回所有(在本例中是一个)组合(因此最小值为1)

由于迭代器不携带其集合的长度信息,因此无法从中获取长度

在您的情况下,您可以使用公式n确定组合的大小/(k!(n-k)!)并迭代,直到您的百分比

例如:

来自math import factorial,ceil
定义我的_组合():
比率=.2#20%
a=范围(10)
n=len(a)
k=5
it=itertools.组合(a,k)
总组合=阶乘(n)/阶乘(k)/阶乘(n-k)
对于范围内的(ceil(总组合*比率)):
下一步

由于迭代器不携带其集合长度的信息,因此无法从中获取长度

在您的情况下,您可以使用公式n确定组合的大小/(k!(n-k)!)并迭代,直到您的百分比

例如:

来自math import factorial,ceil
定义我的_组合():
比率=.2#20%
a=范围(10)
n=len(a)
k=5
it=itertools.组合(a,k)
总组合=阶乘(n)/阶乘(k)/阶乘(n-k)
对于范围内的(ceil(总组合*比率)):
下一步
使用,可以生成元素数上限为的迭代器:

导入itertools
最大梳数=2
梳=工具组合(范围(3),2)
combs_slice=itertools.islice(combs,MAX_combs)
打印(*梳片,sep='\n')
# (0, 1)
# (0, 2)
如果iterable的大小具有
len
,则可以根据组合的总数设置上限:

导入itertools
输入数学
#要绘制的组合百分比
梳比=0.2
#组合数的下界
最小梳数=2
iterable=范围(5)
k=3
combs=itertools.组合(iterable,k)
最大梳=最大(圆形(梳比*数学梳(len(iterable),k)),最小梳)
combs_slice=itertools.islice(combs,max_combs)
打印(*梳片,sep='\n')
# (0, 1, 2)
# (0, 1, 3)
# (0, 1, 4)
iterable=范围(3)
k=2
combs=itertools.组合(iterable,k)
最大梳=最大(圆形(梳比*数学梳(len(iterable),k)),最小梳)
combs_slice=itertools.islice(combs,max_combs)
打印(*梳片,sep='\n')
# (0, 1)
# (0, 2)
注意:是在Python 3.8中引入的,如果您使用的是以前的版本,则可能需要使用自己的实现,例如..

,您可以生成元素数量上限的迭代器:

导入itertools
最大梳数=2
梳=工具组合(范围(3),2)
combs_slice=itertools.islice(combs,MAX_combs)
打印(*梳片,sep='\n')
# (0, 1)
# (0, 2)
如果iterable的大小具有
len
,则可以根据组合的总数设置上限:

导入itertools
输入数学
#要绘制的组合百分比
梳比=0.2
#组合数的下界
最小梳数=2
iterable=范围(5)
k=3
combs=itertools.组合(iterable,k)
最大梳=最大(圆形(梳比*数学梳(len(iterable),k)),最小梳)
combs_slice=itertools.islice(combs,max_combs)
打印(*梳片,sep='\n')
# (0, 1, 2)
# (0, 1, 3)
# (0, 1, 4)
iterable=范围(3)
k=2
combs=itertools.组合(iterable,k)
最大梳=最大(圆形(梳比*数学梳(len(iterable),k)),最小梳)
combs_slice=itertools.islice(combs,max_combs)
打印(*梳片,sep='\n')
# (0, 1)
# (0, 2)

注意:是在Python 3.8中引入的,如果您使用的是以前的版本,您可能需要滚动您自己的实现,或者以它为例……

它必须是一个百分比,还是需要所有组合直到一个固定的数字?如果您需要最多数量的组合,您可以通过索引来实现这一点……您可以使用设置要检索的最大组合数量,例如
itertools.islice(itertools.combines(iterable,r),MAX_COMBS)
(如果它的最大组合数小于
MAX_COMBS
,它仍然可以工作)。您还可以根据组合的数量来制作
MAX\u COMBS
,例如
MAX(round(0.2*math.comb(len(iterable),r)),MIN\u COMBS)
。如果它可以是percentage@jdehesa看起来不错,介意把它变成一个更详细的答案,所以我可以接受它?你知道iterable可以返回多少个元素吗?它必须是一个百分比还是需要所有的组合直到一个固定的数字?如果您需要最多数量的组合,您可以通过索引来实现这一点……您可以使用设置要检索的最大组合数量,例如
itertools.islice(itertools.combines(iterable,r),MAX_COMBS)
(如果它的最大组合数小于
MAX_COMBS
,它仍然可以工作)。您还可以根据组合的数量来制作
MAX\u COMBS
,例如
MAX(round(0.2*math.comb(len(iterable),r)),MIN\u COMBS)
。如果它可以是percentage@jdehesa看起来不错,介意把它变成一个更详细的答案,所以我可以接受它?你知道iterable可以返回多少元素吗?嗨,一件小事,我可以在那里的某个地方引入一个shuffle,这样如果我在同一个列表上调用函数两次,我会得到稍微不同的结果吗?这是一个公平的观点。我认为通过我提出的方法这是不可能的。嗨,一件小事,我可以在那里的某个地方引入一个无序排列,这样如果我在同一个列表上调用函数两次,我会得到稍微不同的结果吗?这是一个fai