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



我是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")

一种稍微更像蟒蛇的方式是请求原谅,而不是通过尝试/捕获来获得许可:

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

或者,如果您不喜欢异常,更干净的方法是使用一些itertools。在这里,我将使用zip_lengest,它在较短列表中没有对象的情况下返回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
##

相关内容

  • 没有找到相关文章

最新更新