2015-11-14 153 views
-1

我有兩個帶名稱的列表,我想比較第一個名字和另一個列表的所有名字,並查看有多少個字母相似,但是我在這樣做時遇到了問題。這裏是我的代碼至今:通過遍歷元素遍歷字符來比較列表字符

listss = ['SAM SMITH', 'JAKE BLAK', 'CONNOR ELLY'] 
lists2 = ['BEN SMITH'] 

matching = [] 

for name in lists2: 
    for ch in name: 
     for names in listss: 
      for chs in names: 
       if chs == ch: 
       matching.append(ch) 
print(matching) 

我想「BEN SMITH」比較每名listss,看看有多少字母彼此相等。所以一個例子就是比較'BEN SMITH'和'SAM SMITH',結果會有5個字母是共同的,即'SMITH'前三個字母不相等。有沒有辦法做到這一點?我一直試圖用for循環來做,但沒有運氣。

+1

也許你正在尋找'拉鍊()'函數...但給你的兩個列表的例子請? –

+0

和什麼問題?問題? – lrleon

+0

所以listss = ['SAM SMITH','JAKE BLAK','CONNOR ELLY']和lists2 = ['BEN SMITH'],我只想知道是否有辦法讓BEN SMITH看看它有多少個字母與listss中的每個名稱都有共同之處。 – user1234567890

回答

0

您可以使用for循環

lists1 = ['SAM SMITH', 'JAKE BLAK', 'CONNOR ELLY'] 
lists2 = ['BEN SMITH'] 

for name2 in lists2: 
    for name1 in lists1: 
     matching = [] 
     for ch2 in name2: 
      for ch1 in name1: 
       if ch1 == ch2 and ch1 != ' ' and ch1 not in matching: 
        matching.append(ch1) 
     print(len(matching), matching) 

# 5 ['S', 'M', 'I', 'T', 'H'] 
# 2 ['B', 'E'] 
# 2 ['E', 'N'] 

或者你可以使用set()

lists1 = ['SAM SMITH', 'JAKE BLAK', 'CONNOR ELLY'] 
lists2 = ['BEN SMITH'] 

for name2 in lists2: 
    for name1 in lists1: 
     matching = (set(name1) & set(name2)) - set(' ') 
     print(len(matching), matching) 

# 5 {'T', 'I', 'S', 'M', 'H'} 
# 2 {'B', 'E'} 
# 2 {'N', 'E'} 
+0

老兄感謝這幫了很多! – user1234567890