python中是否存在任何内置函数,而不是可以返回两个字符串中的数学字符数,例如:
INPUT:
TICK TOCK
CAT DOG
APPLE APPLES
输出:
3
0
5
单词“TICK”和“TOCK”的得分为3,因为三个字符(T,C,K)相同。同样,“CAT”和“DOG”得分为0,因为没有字母匹配。
我是python中的新bie所以请帮我举例。
答案 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)