Itertools生成加扰的组合

发布于 2021-01-29 17:08:34

我要做的是获取所有组合以及每个组合的所有唯一排列。到目前为止,具有替换功能的组合使我印象深刻:

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

有没有更有效的算法?

关注者
0
被浏览
35
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    听起来您正在考虑一种“替换置换”,'AB'置换大小为2的输入将提供输出

    AA
    AB
    BA
    BB
    

    如果是这样,那就是输入与自身时间的笛卡尔积n。您要itertools.product

    >>> import itertools
    >>> list(itertools.product('AB', repeat=2))
    [('A', 'A'), ('A', 'B'), ('B', 'A'), ('B', 'B')]
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看