python - 基于汉明距离从Python列表中删除字符串

标签 python

我有一个 list

l = ['ATCGGG','CGGGAT,CGGGAA','ATGGCC,CTCCCT,CTCCGT,TTAAGG']

我想计算列表中每个元素中字符串之间的汉明距离,并删除小于或等于另一个元素的汉明距离 1 的字符串。示例预期输出为

l = ['ATCGGG','CGGGAT','ATGGCC,CTCCCT,TTAAGG']

我知道如何计算两个字符串之间的汉明距离:

def hamming(s1, s2):
    if len(s1) != len(s2):
        raise ValueError("Undefined for sequences of unequal length")
    return sum(ch1 != ch2 for ch1, ch2 in zip(s1, s2))

我无法正确迭代列表的元素。请问有什么好的办法吗?

最佳答案

这会产生您想要的输出:

result = []
for group in l:
    pieces = group.split(",")
    thischunk = []
    for piece in pieces:
        if all(hamming(piece, base) > 1 for base in thischunk):
            thischunk.append(piece)
    result.append(",".join(thischunk))
print(result)

输出为:

['ATCGGG', 'CGGGAT', 'ATGGCC,CTCCCT,TTAAGG']

关于python - 基于汉明距离从Python列表中删除字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37997674/

相关文章:

python - 使用观察权重绘制密度

python - 将字符串转换为 NDB 属性的正确类型的正确方法?

python - 如何在Nameko的依赖提供程序中使用Config?

python - 什么是正确的 : widget. rowconfigure 或 widget.grid_rowconfigure?

python - 如何以小时为单位显示 timedelta :min:sec?

python - 如何检查字符串是否包含任何字符列表?

python - 如何使用子进程捕获输出并允许输出打印到屏幕?

python - 在 python 中逐行创建一个大数据集

python - Django:如何将字符串转换为形式?

python - Django 表单 : integrating a submit button as part of your form