提问人:Théo Durand 提问时间:3/28/2023 更新时间:3/28/2023 访问量:81
查找两个序列 (String) Python 的唯一组合
Finding unique combinations of two sequence (String) Python
问:
你好,我有一个问题。
我有两个这样的列表:
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)
谢谢你的回答
答:
3赞
Jorge Luis
3/28/2023
#1
首先,让我们获取每个位置的所有货币对:
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)))]
3赞
Kelly Bundy
3/28/2023
#2
就像豪尔赫·路易斯(Jorge Luis)的回答一样,但也在每个位置更早地删除了重复数据。然后我们只直接生产 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)
输出(在线尝试!
{'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)
评论