在python中寻找两个字符串的唯一组合

2024-04-26 20:54:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两条线:

StringA: ['K', 'T', 'T', 'T', 'K', 'K', 'G', 'T', 'T', 'T', 'T', 'K', 'K']

StringB: ['T', 'K', 'G', 'G', 'K', 'T', 'T', 'K', 'G', 'G', 'K', 'K', 'T']

我想测试一下有多少字母的独特组合。字符串是按顺序排列的,所以我只想将StringA位置1与StringB位置1匹配,StringA位置2与StringB位置2匹配,依此类推,上面字符串中的对是(KT), (TK), (TG), (TG), (KK), (KT), (GT), (TK), (TG), (TG), (TK), (KK), (KT)。在

有5种独特的组合:(KT), (TK), (TG), (GT), (KK)

我使用以下代码从两个.csv文件生成字符串。在

^{pr2}$

但我不知道怎么做比较。我试着把字符串转换成集合,正如我在另一个线程中读到的,这是必需的,但我不知道为什么,我不能让它工作。在


Tags: 文件csv字符串代码gt字母tg线程
3条回答

您可以使用zip函数和set创建预期列表:

>>> z=set(zip(a,b))
>>> z
set([('T', 'G'), ('K', 'T'), ('T', 'K'), ('G', 'T'), ('K', 'K')])

然后使用^{}模块中的chaincombinations函数创建组合:

^{pr2}$

只需使用zipset组合两个字符串列表并获得唯一的组合。我使用列表理解返回组合字符串:

>>> unique = [''.join(x)  for x in set(list(zip(StringA, StringB)))]
>>> unique
['TG', 'GT', 'KT', 'TK', 'KK']

或者,如果您只是希望它们出现在set中,您可以删除列表理解:

^{pr2}$
snp1 = ['K', 'T', 'T', 'T', 'K', 'K', 'G', 'T', 'T', 'T', 'T', 'K', 'K']
snp2 = ['T', 'K', 'G', 'G', 'K', 'T', 'T', 'K', 'G', 'G', 'K', 'K', 'T']
combinations = []
for a,b in zip(snp1, snp2):
    combinations.append(a+b)         

print list(set(combinations))

输出:

^{pr2}$

或者简单的一句话:

list(set([a+b for a,b in zip(snp1, snp2)]))

输出:

^{pr2}$

相关问题 更多 >