我想比较两个列表,如果两个列表的匹配号都相同。匹配号码在这里很重要。我是这样做的;
List1= ['john', 'doe','sima']
List2=[]
test = "John is with Doe but alina is alone today."
List2 = test.lower().split()
n=0
counter=0
while n < len(List1):
for i in range(len(List2)):
if List1[n] == List2[i]:
print("Matched : "+str(counter) + List1[n])
n=n+1
counter=counter+1
else:
print("No match :"+ List1[n])
# break
# break
如果两个列表都有匹配的单词,程序运行正常。但对于无法匹配的单词sima
,循环运行无限次。如果在for
中中断else
循环,然后在代码中注释的时间之后中断while
循环,则程序仅运行第一次匹配。提前谢谢。
修改1
while n < len(List1):
for i in range(len(List2)):
# print("Matching :"+ List1[n]+ " : "+ List2[i])
if List1[n] == List2[i]:
print("Matched : "+str(counter) + List1[n])
counter=counter+1
else:
print("No match :"+ List1[n])
n=n+1
给出IndexError: list index out of range
错误
答案 0 :(得分:2)
从您的代码中,这将有效。虽然不是最优雅的写作方式,但这是你的代码
List1= ['john', 'doe','sima']
List2=[]
test = "John is with Doe but alina is alone today."
List2 = test.lower().split()
n=0
counter=0
while n < len(List1):
for i in range(len(List2)-1):
if List1[n] == List2[i]:
print("Matched : "+str(counter) + List1[n])
counter=counter+1
else:
print("No match :"+ List1[n])
n=n+1
这是你的结果
Matched : 0john
No match :john
No match :john
No match :john
No match :john
No match :john
No match :john
No match :john
No match :doe
No match :doe
No match :doe
Matched : 1doe
No match :doe
No match :doe
No match :doe
No match :doe
No match :sima
No match :sima
No match :sima
No match :sima
No match :sima
No match :sima
No match :sima
No match :sima
答案 1 :(得分:1)
List1= ['john', 'doe','sima', 'alina' ]
List2=[]
test = "John is with Doe but alina is alone today."
List2 = test.lower().split()
counter = 0
for word in List1:
try:
index_number = List2.index(word)
counter += 1
print("Matched : " + str(counter) + " " + word + " at " + str(index_number))
except:
print("No Match Found")
虽然你的问题的解决方案已经被别人回答,但仍然不优雅。在你提到的问题中,匹配号很重要,所以我给你解决问题的方法。请看。
答案 2 :(得分:0)
问题是由于一个小问题而发生的。您在n
正在增加if
,这意味着如果满足条件则增加变量。在您的情况下,当它达到sima
时,不满足条件,因此不会增加n。因此,您需要在n
循环后增加for
。