【问题标题】:Compare 2 Strings in Python在 Python 中比较 2 个字符串
【发布时间】:2016-09-04 18:30:32
【问题描述】:

所以,我需要找出一个程序,当您输入 2 个相同长度的不同字符串时,它将返回 NOT 打印两个字符串之间的差异数。字符的顺序也很重要。

例如,如果您输入("abcdef", "aabccf") 它应该返回 4。

("abcdef", "accddf") 应该返回 2。

到目前为止,我只有:

定义差异计数(A,B): 计数器 = 0 str1 = 列表 (A) str2 = 列表 (B) 对于 str1 中的字母: 如果字母 == str2: 计数器 = 计数器 + 1 返回计数器

所有这些都是返回 0,所以我觉得我错过了一些东西。

【问题讨论】:

  • 如果 x 和 y 的长度不同会怎样?预期的输出是什么?
  • 我正在考虑添加 len (x) = len (y) 以确保它们的长度相等。如果它们的长度不相等,我可能会在末尾添加一个打印“请输入相等长度的字符串”。

标签: python string


【解决方案1】:

我会用

def difference(word_one, word_two):
    return sum(l1 != l2 for l1, l2 in zip(word_one, word_two))

类似

>>> difference('abcdef', 'abcdef')
0
>>> difference('abcdef', 'abcabc')
3

【讨论】:

  • 不确定为他们做这个人的作业是个好主意:/
【解决方案2】:

您可以将zip 字符串放在一起,然后计算有多少不同的对:

def chardifferencecounter(x, y):
    return len([1 for c1, c2 in zip(x, y) if c1 != c2])

>>> chardifferencecounter('abcdef', 'aabccf')
4
>>> chardifferencecounter('abcdef', 'accddf')
2

说明:

将字符串压缩在一起会产生这样的结果:

>>> s1 = 'abcdef'
>>> s2 = 'aabccf'
>>> zip(s1, s2)
[('a', 'a'), ('b', 'a'), ('c', 'b'), ('d', 'c'), ('e', 'c'), ('f', 'f')]

所以它从每个字符串中的相同位置获取一个字符并将它们配对在一起。所以你只需要计算有多少对是不同的。这可以使用列表推导来创建一个列表,其中过滤掉相同的对,然后获取该列表的长度。

【讨论】:

  • @Pichu2016:我不是已经在答案中解释了吗?查看documentation了解更多详情。
【解决方案3】:

只是为了换个角度看这里是一个不使用zipenumerate的解决方案:

def chardifferencecounter(x,y):
    if len(x) != len(y):
        raise Exception('Please enter strings of equal length')
    return sum(x[i] != y[i] for i in range(len(x)))

请注意,当 xy 的长度不同时,此解决方案也会引发异常,这是您在评论中想要的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多