Python 用itertools生成2个1和3个0的所有置换

Python 用itertools生成2个1和3个0的所有置换,python,combinatorics,itertools,Python,Combinatorics,Itertools,可能是基本的,但在其他问题中找不到。 我试过: print ["".join(seq) for seq in itertools.permutations("00011")] 但是有很多重复,看起来itertools不理解所有的零,所有的一都是一样的 我错过了什么 编辑: 哎呀。多亏了Gareth,我才发现这个问题是重复的:。 我认为我对这个问题的措辞更清楚,所以没有结束发言 set("".join(seq) for seq in itertools.permutations("00011")

可能是基本的,但在其他问题中找不到。 我试过:

print ["".join(seq) for seq in itertools.permutations("00011")]
但是有很多重复,看起来itertools不理解所有的零,所有的一都是一样的

我错过了什么

编辑:

哎呀。多亏了Gareth,我才发现这个问题是重复的:。 我认为我对这个问题的措辞更清楚,所以没有结束发言

set("".join(seq) for seq in itertools.permutations("00011"))
返回一个包含10个位置的列表,其中两个位置可以在五位数以内(其他位置为零):

对于2个1和13个0的情况,请使用以下命令:

list(itertools.combinations(range(5), 2))
返回105个位置的列表。而且它比您原来的解决方案快得多

现在,函数:

def combiner(zeros=3, ones=2):
    for indices in itertools.combinations(range(zeros+ones), ones):
        item = ['0'] * (zeros+ones)
        for index in indices:
            item[index] = '1'
        yield ''.join(item)

print list(combiner(3, 2))

['11000',
 '01100',
 '01010',
 '01001',
 '00101',
 '00110',
 '10001',
 '10010',
 '00011',
 '10100']
这需要14.4µs

list(combiner(13, 2))
返回105个元素需要134µs

返回一个包含10个位置的列表,其中两个位置可以在五位数以内(其他位置为零):

对于2个1和13个0的情况,请使用以下命令:

list(itertools.combinations(range(5), 2))
返回105个位置的列表。而且它比您原来的解决方案快得多

现在,函数:

def combiner(zeros=3, ones=2):
    for indices in itertools.combinations(range(zeros+ones), ones):
        item = ['0'] * (zeros+ones)
        for index in indices:
            item[index] = '1'
        yield ''.join(item)

print list(combiner(3, 2))

['11000',
 '01100',
 '01010',
 '01001',
 '00101',
 '00110',
 '10001',
 '10010',
 '00011',
 '10100']
这需要14.4µs

list(combiner(13, 2))

返回105个元素需要134µs。

太好了!但当我尝试2个1和13个0(C(15,2)=105个选项)时,python将永远无法计算这105个选项。。。为什么这么慢?那是因为这一策略贯穿了所有15个步骤!=1307674368000输入的置换.bah。还有更有效的吗?可能缺少了itertools的一些组合功能,这不可能是对的……太好了!但当我尝试2个1和13个0(C(15,2)=105个选项)时,python将永远无法计算这105个选项。。。为什么这么慢?那是因为这一策略贯穿了所有15个步骤!=1307674368000输入的置换.bah。还有更有效的吗?可能缺少了itertools的一些组合功能,这不可能是正确的。。。by ralu包含用于在Python中生成唯一置换的代码。是相关的,并且包含用于在python中生成所有不同排列的有效算法。by ralu包含用于在Python中生成唯一置换的代码。是相关的,并且包含一个有效的算法,用于在python中生成所有不同的排列。非常聪明的思考问题的方式。非常聪明的思考问题的方式。