Python:找到2个字符串之间第一个出现差异的位置。 (长度不等)

时间:2016-05-31 10:08:30

标签: python python-3.x

我一直试图解决这个过去的期末考试问题。 我想我越来越近了,但是由于两个字符串的长度不等,我得到的索引超出了范围错误,我无法弄明白...

你会如何尝试解决这个问题? 如何解决IndexError?

提前谢谢你:D

def print_first_difference(string1, string2):
    """ Solving the first difference between 2 words, and print the position. """
    for letter in range(len(string1)):
        if string1[letter] != string2[letter]:
            print("Strings differ at postion {}".format(letter + 1))
            break
    else:
        print("Strings are identical")


print_first_difference("abcd", "abde")  
print_first_difference("abcdef", "abcdef")  
print_first_difference("abcdef", "abc") 
print_first_difference("abc", "abcdef") 

Output:
Strings differ at postion 3
Strings are identical
IndexError: string index out of range

2 个答案:

答案 0 :(得分:2)

try/catch的情况下将测试封装在IndexError中,这意味着第二个字符串比第一个字符串短,这意味着两个字符串不同。

for letter in range(len(string1)):
    try:
        if string1[letter] != string2[letter]:
            print("Strings differ at postion {}".format(letter + 1))
            break
    except IndexError:
            print("Strings differ at postion {}".format(letter + 1))
            break

我将此作为练习让读者对上述代码进行分解。

修改:您是否考虑过string1string2短的情况?我认为你的算法会假设两个字符串都是相同的(他们不是这样)。

答案 1 :(得分:0)

我的解决方案是:

def print_first_difference(string1, string2):
    aggr_strings = zip(string1, string2)
    for index, tup in enumerate(aggr_strings):
        if tup[0] != tup[1]:
            print("Strings differ at position " + str(index))
            break
    else:
        if len(aggr_strings) != len(max(string1, string2)):
            print("Strings differ at position " + str(len(min(string1, string2))))
        else:
            print("Strings are identical")