列表索引超出范围 - 比较两个不同长度的列表
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
##
我是 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
##