列表索引超出范围 - 比较两个不同长度的列表

list index out of range-comparing two lists of different length

我是 Python 的新手。如何比较两个不同长度的列表?如果两个字符不匹配,我想打印“替换”,如果第二个列表字符为空,则打印“删除”,如果第一个列表字符为空,则打印“插入”。

str1 = "ANNA"
str2 = "ANA"

list1 = list(str1)
list2 = list(str2)

for i in range(len(list1)):
    if list1[i] != list2[i]:
        print("substitute")
    elif len(list2[i]) == 0:
        print("insert")
    else:
        print("delete")

修改当前脚本的方法是避免尝试 运行 关闭 list2 的末尾,因为那是触发错误的原因:

# Note, strings can be accessed like a list with []
str1 = "ANNA"
str2 = "ANA"

for i in range(min(len(str1), len(str2))):
    if str1[i] != str2[i]:
        print("substitute")
    else:
        print("delete")
for _ in range(max(0,len(str1)-len(str2))):
    print("insert")

稍微 python-ic 的方式是请求宽恕而不是使用 try/catch:

的许可
for i, c1 in enumerate(str1):
    try:
        if c1 != str2[i]:
            print("substitute")
        else:
            print("delete")
    except IndexError:
        print("insert")

或者如果您不喜欢异常,更简洁的方法是使用一些 itertools。在这里,我将使用 zip_longest 其中 returns None 用于较短列表中没有对象的情况

from itertools import zip_longest

for a, b in zip_longest(str1, str2):
    if not b:
        print("insert")
    elif a == b:
        print("delete")
    else:
        print("substitue")

您需要检查 str 作为顺序容器的特性。

请检查以下代码。

str1 = "ANNA"
str2 = "ANA"

## you don't need to make str to list. str is a container
####list1 = list(str1)
####list2 = list(str2)

if not str1 and not str2 :   # empty str is logically false
    print('substitute')
else:
    print( 'insert' if str2 else 'delete' )
##    # followings can replace above print()
##    if str2:    
##        print('insert')
##    else:
##        print('delete')

    # you may need this function
    if str2:
        str1 = str2
    else:
        str1 = ''  # this can remove all characters in str

##    # this if statement is same with following line
##    str1 = str2
##