比较字符串python中的字符

2024-06-06 01:25:44 发布

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

我试图比较两个独立字符串中的字符,其思想是返回一个值,该值对应于两个字符串共享的字符数。例如,如果字符串1是“mouse”,字符串2是“house”。他们会共用4/5个字符。需要注意的是,只有在同一个“索引位置”中,它们才共享一个字符

def compareWords(word1, word2):
result = 0
if word1[0] in word2[0]:
    result += 1
if word1[1] in word2[1]:
    result += 1
if word1[2] in word2[2]:
    result += 1
if word1[3] in word2[3]:
    result += 1
if word1[4] in word2[4]:
    result += 1
if word1[5] in word2[5]:
    result += 1
    print result, '/5'

working result

non-working result


Tags: 字符串inifdefresult字符house思想
2条回答

zipsum

a,b = "house", "mouse"

print(sum(s1 == s2 for s1, s2 in zip(a, b)))
4

压缩将在同一索引处对字符,然后将s1 == s2的次数相加得到匹配字符的计数:

^{pr2}$

唯一不清楚的是,如果字符串长度不同,则使用什么作为的。在

如果您确实想要匹配和求和,您仍然可以使用相同的逻辑:

def paired(s1, s2):
    sm, index_ch = 0, []
    for ind, (c1, c2) in enumerate(zip(s1, s2)):
        if c1 == c2:
            sm += 1
            index_ch.append((ind, c1))
    return index_ch, sm

index_char, sm = paired("house", "mouse")

print(index_char, sm)

输出:

([(1, 'o'), (2, 'u'), (3, 's'), (4, 'e')], 4)

如果要保留匹配项的位置和字符,可以枚举字符串,然后计算结果元组集的交集。如果你不想保留任何关于比赛性质的信息,我认为Padraic的答案更好。在

演示:

>>> s1 = 'hello world'
>>> s2 = 'xelxx worxx'
>>> same = set(enumerate(s1)).intersection(enumerate(s2))
>>> same
set([(7, 'o'), (2, 'l'), (1, 'e'), (8, 'r'), (6, 'w'), (5, ' ')])
>>> len(same)
6

相关问题 更多 >