我有十列:n1,n2,n3,n4,n5,n6,n7,n8,n9,n10
单行中的值加起来必须正好是10,并且所有值必须是小于或等于5的非负整数
我想根据我刚才描述的约束条件,制作一个具有各种可能排列的数据帧。顺序事项(即,[5,5,0,0,0,0,0,0,0,0]和[5,0,5,0,0,0,0,0]都应该是单独的行)
以下是我的尝试:
import itertools as it
permutations = [i for i in it.permutations(range(0,6), 10) if sum(i)==10]
df = pd.DataFrame(data=permutations,columns=['x1','x2','x3','x4','x5','x6','x7','x8','x9','x10'])
问题是df
中没有行。数组permutations
为空。我不明白这是为什么。如果我用it.combinations_with_replacement
替换it.permutations
,结果列表的长度是30。为什么it.permutations
什么也不返回
这很容易解决
因为顺序很重要,所以您实际上在寻找
itertools.product
(我知道,这是个奇怪的名字)。以下是文档:https://docs.python.org/3/library/itertools.html#itertools.product解决方案:
您无法从6项列表中获得10项的排列。(也许“排列”并不是你认为的意思。)
这里有一种方法可以得到你想要的(尽管它需要一段时间才能运行):
(说明:每个
p
都是选择10组具有适当总和的值的方法。我们使用permutations
找到对该组值排序的所有方法。)你选择了错误的方式来重复事情
这将得到大约85228个结果
相关问题 更多 >
编程相关推荐