将字符串差异与字符串列表进行比较

时间:2011-12-19 12:47:03

标签: python string list

我有一个方法,可以计算两个字符串中的差异数,并输出差异所在的位置。

def method(a):
    count=0
    s1="ABC"
    for i in range (len(a)):
        if not a[i]==s1[i]:
            count=count+1
        else:
            count=count+0
    return a,count,difference(a, s1)

在输入ex CBB上,此方法输出

('CBB', 2, [1, 0, 1])

我真正需要的是这个方法做同样的事情,但不仅要比较s1中的单个字符串,还要比较字符串列表

s1 = ['ACB', 'ABC', 'ABB']

任何有智能方法的人都可以这样做吗?

2 个答案:

答案 0 :(得分:2)

好的,澄清之后,不要硬编码s1,而是让你的方法把它作为参数:

def method(a, s1):
    count=0
    for i in range (len(a)):
        if not a[i]==s1[i]:
            count=count+1
        else:
            count=count+0
    return a,count,difference(a, s1)

然后使用list compherension:

 result = [method(a, s1) for s1 in list]

但请注意,如果a超过s1,则方法将失败。由于你真的没有说明在这种情况下结果应该是什么,我原样保留原样。

答案 1 :(得分:1)

compare函数计算差异的数量(以及您使用difference()创建的差异的映射)。我重写了比较函数,将一个基本字符串与src进行比较,这样你就不会一直与"ABC"进行比较。

def compare(src, test):
    if len(src) != len(test):
        return # must be the same length
    diffmap = [0]*len(src)
    count = 0
    for i, c in enumerate(src):
        if not c == test[i]:
            count = count+1
            diffmap[i] = 1
    return test, count, diffmap

compare_to_many函数只需查看要与srcs进行比较的字符串列表,并创建这些基本字符串与测试字符串test之间的比较列表。

def compare_to_many(srcs, test):
    return map(lambda x: compare(x, test), srcs)

编辑:

在评论中澄清后,@ X-Pender需要对源列表进行硬编码。这可以通过以下单一功能反映出来:

def compare(test):
    def compare_one(src, test):
        diffmap = [0]*len(src)
        count = 0
        for i, c in enumerate(src):
        if not c == test[i]:
            count = count+1
            diffmap[i] = 1
        return test, count, diffmap
    sources = ["ABC", "CDB", "EUA"] # this is your hardcoded list
    return map(lambda x: compare_one(x, test), sources)