查找两个序列的唯一组合(String)Python

insrf1ej  于 2023-03-31  发布在  Python
关注(0)|答案(2)|浏览(116)

你好,我有一个问题。
我有两个这样的列表:
list1 = ['G','C','A','T','C','A']
list2 = ['G','A','*','T','AC','A']
我想在Python中找到这两个序列的所有可能组合。
例如,结果将是:
(GCATCA), (GA*TACA), (GAATCA), (GA*TCA), (GC*TCA), (GC*TACA), (GCATACA), (GAATACA)
谢谢你的回答

deyfvvtc

deyfvvtc1#

就像Jorge Luis的answer一样,但也在每个位置上更早地进行重复数据删除。然后我们只直接产生8个组合,而不是产生64个并丢弃其中的56个。

from itertools import product

list1 = ['G','C','A','T','C','A']
list2 = ['G','A','*','T','AC','A']

result = {*map(''.join, product(*map(set, zip(list1, list2))))}

print(result)

输出(Attempt This Online!):

{'GAATCA', 'GA*TCA', 'GA*TACA', 'GC*TACA',
 'GCATACA', 'GC*TCA', 'GCATCA', 'GAATACA'}

或者,如果没有itertools:

list1 = ['G','C','A','T','C','A']
list2 = ['G','A','*','T','AC','A']

result = {''}
for pair in zip(list1, list2):
    result = {
        r + p
        for p in set(pair)
        for r in result
    }

print(result)

Attempt This Online!

9ceoxa92

9ceoxa922#

首先,让我们得到每个位置的所有对:

pairs = zip(list1, list2)

现在让我们为每个位置的每个选择做一个组合。为此,我们将使用itertools.product

from itertools import product

combinations = product(*zip(list1, list2))

让我们摆脱所有重复的组合。

unique_combinations = set(combinations)

最后,让我们将每个组合连接到一个字符串中:

all_combinations = [''.join(bases) for bases in unique_combinations]

这里all_combinations将是所需的输出:['GC*TCA', 'GC*TACA', 'GCATCA', 'GAATACA', 'GCATACA', 'GA*TACA', 'GAATCA', 'GA*TCA']。当然你可以在一行中得到它:[''.join(bases) for bases in set(product(*zip(list1, list2)))]

相关问题