通过逐字符迭代元素来比较列表

时间:2015-11-14 01:16:20

标签: python list

我有两个带名字的列表,我想将第一个名称与另一个列表的所有名称进行比较,看看有多少字母相似,但我这样做有困难。这是我到目前为止的代码:

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 :(得分: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'}