Py学习  »  Python

在python中比较两个列表,只保留匹配项和不匹配项

iNoob • 6 年前 • 1741 次点击  

我试图遍历两个元组列表并寻找匹配项。我想生成两个元组列表作为输出:一个包含匹配项(其第一个值出现在两个列表中的元组)和一个不匹配项(其第一个值出现在一个列表中,但不在另一个列表中的元组)。

我尝试通过在嵌套循环中遍历两个列表并比较其中的元组来实现这一点。但是,当我这样做时,生成的“不匹配”列表也包含确实匹配的元组,并且也出现在“匹配”列表中。

我尽量避免这样。一定有更好的办法。任何帮助都将不胜感激。

下面是一个例子:

data1 = [
    ("Aaden", "3"),
    ("Aamir", "3"),
    ("Aarav", "3"),
    ("aaren", "3"),
    ("aarika", "3"),
    ("Adad", "3")
]

data2 = [
    ("Aaden", "3"),
    ("Aamir", "3"),
    ("Aarav", "3"),
    ("aaren", "3"),
    ("aarika", "3"),
    ("Aaron", "3"),
    ("Abaddon", "3"),
    ("abagael", "3"),
    ("abagail", "3"),
    ("Abatu", "3"),
    ("abbe", "3"),
    ("abbey", "3"),
    ("abbi", "3"),
    ("abbie", "3"),
    ("Abbot", "3"),
    ("Abbott", "3"),
    ("abby", "3"),
    ("abbye", "3"),
    ("Abdel", "3"),
    ("Abdiel", "3"),
    ("Abdul", "3"),
    ("Abdulkarim", "3"),
    ("Abdullah", "3"),
    ("Abduxuel", "3"),
    ("Abe", "3"),
    ("Abel", "3"),
    ("Abelard", "1"),
    ("abigael", "3"),
    ("abigail", "3"),
    ("abigale", "3"),
    ("Abigar", "3"),
    ("Abigor", "3"),
    ("Abner", "4"),
    ("abra", "3"),
    ("Abraham", "3"),
    ("Abram", "3"),
    ("Acacia", "3"),
    ("Ace", "3"),
    ("Achilles", "3"),
    ("Aclahayr", "3"),
    ("ada", "6"),
    ("awdad", "3"),
    ("awad", "3"),
    ("Ainiond", "3"),
    ("Adww", "3"),
    ("james","3")
]

match = []
no_match = []

for item1 in data1:
    for item2 in data2:
        if item1[0] == item2[0]:
            match.append(item1)
        else:
            no_match.append(item1)      

print('First List Count: {}'.format(len(data1)))
print('Second List Count: {}'.format(len(data2)))

print('Match Count: {}'.format(len(match)))
print('No Match Count: {}'.format(len(no_match)))

输出:

First List Count: 6
Second List Count: 46
Match Count: 5
No Match Count: 271
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/41083
文章 [ 3 ]  |  最新文章 6 年前