猿问

检查多维列表的一部分是否在单独的多维列表中

这是一些示例代码。


list1 = [['one','a'],['two','a'],['three','a'],['four','a']]

list2 = [['three','b'],['four','a'],['five','b']]


for l in list1:

    if l not in list2:

        print(l[0])

以及此代码的输出。


one

two

three

因为['four','a']确实出现在两个列表中。


我要做的是检查第一个列表中每个条目的第一项是否出现在第二个列表中,我尝试了以下变体


list1 = [['one','a'],['two','a'],['three','a'],['four','a']]

list2 = [['three','b'],['four','a'],['five','b']]


for l in list1:

    if l[0] not in list2:

        print(l[0])

但是,该代码返回


one

two

three

four

尽管“三”和“四”都出现在第二个列表中。


我之前使用过不同的方法来查找仅出现在一对列表中的一个中的值,然后用它来制作一个包含所有可能值且没有重复的主列表,我相信使用这种方法应该可以做到这一点,但是语法对我来说是个谜。我在这里哪里出错了?


千巷猫影
浏览 93回答 2
2回答

Cats萌萌

您可以使用not any(),然后检查理解中的特定要求:list1 = [['one','a'],['two','a'],['three','a'],['four','a']]list2 = [['three','b'],['four','a'],['five','b']]for l in list1:    if not any(l[0] == l2[0] for l2 in list2):        print(l[0])# one# two如果顺序无关紧要,您也可以使用集合:list1 = [['one','a'],['two','a'],['three','a'],['four','a']]list2 = [['three','b'],['four','a'],['five','b']]set(l[0] for l in list1) - set(l2[0] for l2 in list2)# {'one', 'two'}

达令说

您可以使用set operationslist1 = [['one','a'],['two','a'],['three','a'],['four','a']]list2 = [['three','b'],['four','a'],['five','b']]result = set(i[0] for i in list1) - set(i[0] for i in list2)print(result)# output {'one', 'two'}
随时随地看视频慕课网APP

相关分类

Python
我要回答