2017-02-02 186 views
1

我想比較兩個列表,如果兩個列表都有與其匹配號碼相同的單詞。比賽號碼在這裏很重要。我是這樣做的;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,循環無限次地運行。如果在else中打破for循環,然後打破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

使用set和&。 – YOU

+1

將n = n + 1行移動到「if」條件之外的循環末尾。如果「如果」條件失敗,那麼n永遠不會增加,並且循環繼續進行 –

+0

@ Dinesh.hmn請參閱編輯問題 – Humty

回答

0

出現該問題由於小的問題。您正在增加nif body,這意味着如果條件滿足,則增加變量。在你的情況下,當它達到sima,條件不符合,所以n不會增加。所以你需要在for循環後增加n

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

雖然解決您的問題已經被其他的還是它不是優雅的回答。在你提到的問題中,比賽號碼很重要,所以我給你解決問題的方法。敬請期待。

+0

@ Harry,感謝您以優雅的方式編寫代碼。從他的代碼中我看到的是一個剛剛開始的人,所以我不想使用高級代碼來讓他難過,upvoted。 –

+0

是的這就是爲什麼我upvoted你的答案。但我仍然認爲這是爲他未來的參考寫的:) – Harry