比较字符串

时间:2011-03-11 00:22:43

标签: python

python中是否存在任何内置函数,而不是可以返回两个字符串中的数学字符数,例如:

INPUT:

   TICK TOCK
   CAT DOG
   APPLE APPLES

输出:

 3
 0
 5

单词“TICK”和“TOCK”的得分为3,因为三个字符(T,C,K)相同。同样,“CAT”和“DOG”得分为0,因为没有字母匹配。

我是python中的新bie所以请帮我举例。

5 个答案:

答案 0 :(得分:6)

这是使用列表推导的版本:

[x == y for (x, y) in zip("TICK", "TOCK")].count(True)

或者,更短(使用operator):

import operator
map(operator.eq, "TICK", "TOCK").count(True)

根据@Kabie的说法,<expr>.count(True)可以在两个版本中替换为sum(<expr>)

答案 1 :(得分:1)

没有内置功能。但是你可以使用一些简单的表达式来实现它。

>>> A, B = sorted("APPLE APPLES".split(), key=len)
>>> len([e for e in A if e in B])
5

答案 2 :(得分:1)

如果字符的位置顺序很重要,那么所选择的答案就足够了。问题是,如果情况并非如此,则给定的解决方案将无效。

如果位置不重要,但顺序是,您可以编写一个返回longest common subsequence长度的函数。以下是一个示例实现:

def lcs(string1, string2):
    m = len(string1)
    n = len(string2)

    C = [[0] * (n + 1)] * (m + 1)
    for i in range(m + 1)[1:]:
        for j in range(n + 1)[1:]:
            if string1[i - 1] == string2[j - 1]:
                C[i][j] = C[i - 1][j - 1] + 1
            else:
                C[i][j] = max(C[i][j - 1], C[i - 1][j])
    return C[m][n]

如果位置顺序无关紧要,您可以使用collections.Counter(Python 2.7 / 3.1;或http://code.activestate.com/recipes/576611/),如下所示:

def f(string1, string2):
    set_string1 = Counter(string1)
    set_string2 = Counter(string2)

    # get common characters
    common = set_string1 & set_string2

    # return the sum of the number of occurrences for each character
    return reduce(lambda a, b: a + b, common.values())

答案 3 :(得分:1)

是的,你通过写作导入运营商 导入运算符 并使用 operator.eq 方法,如下所示:

import operator

operator.eq(String, String)

答案 4 :(得分:0)

希望这会有所帮助:

  def CommonLetters(s1, s2):

  l1=list(''.join(s1.split()))

  l2=list(''.join(s2.split()))

  return [x for x in l1 if x in l2]

  x= CommonLetters('cerberus', 'atorb')

  print len(x)