Python 生成加扰组合的Itertools

Python 生成加扰组合的Itertools,python,numpy,combinatorics,bioinformatics,itertools,Python,Numpy,Combinatorics,Bioinformatics,Itertools,我想做的是获得所有组合和每个组合的所有唯一排列。到目前为止,带替换功能的组合只让我受益匪浅: 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 fo

我想做的是获得所有组合和每个组合的所有唯一排列。到目前为止,带替换功能的组合只让我受益匪浅:

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')]

听起来你想的是一种“置换置换”,置换大小为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')]