[英]Itertools to generate scrambled combinations
我要做的是获取所有组合以及每个组合的所有唯一排列。 到目前为止,具有替换功能的组合使我印象深刻:
from itertools import combinations_with_replacement as cwr
foo = list(cwr('ACGT', n)) ## n is an integer
我对如何前进的直觉是要做这样的事情:
import numpy as np
from itertools import permutations as perm
bar = []
for x in foo:
carp = list(perm(x))
for i in range(len(carp)):
for j in range(i+1,len(carp)):
if carp[i] == carp[j]:
carp[j] = ''
carp = carp[list(np.where(np.array(carp) != '')[0])]
for y in carp:
bar.append(y)
for i in range(len(bar)):
for j in range(i+1,len(bar)):
if bar[i] == bar[j]:
bar[j] = ''
bar = [bar[x2] for x2 in list(np.where(np.array(bar) != '')[0])]
有没有更有效的算法?
听起来您好像在想一种“置换置换”,置换大小为2的'AB'
输入将提供输出
AA
AB
BA
BB
如果是这样,那就是输入本身的n
次乘以笛卡尔积 。 您想要itertools.product
:
>>> import itertools
>>> list(itertools.product('AB', repeat=2))
[('A', 'A'), ('A', 'B'), ('B', 'A'), ('B', 'B')]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.