python中两个列表的比较

时间:2017-02-02 05:12:35

标签: python

我想比较两个列表,如果两个列表的匹配号都相同。匹配号码在这里很重要。我是这样做的;

    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错误

3 个答案:

答案 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