为什么我的列表包含否定不起作用?

时间:2014-04-11 21:08:38

标签: python-3.x

作为我正在编写的(Python 3.3)程序的一部分,我正在比较两个列表;我想找到第一个列表中没有出现的第二个列表的每个成员,以便我可以构建数据库命令。 “in”成员资格测试按照我的预期工作,但它的否定却没有。

例如:

l1 = ['MNE11B', 'DLC05A', 'MKH08A', 'PERGDM', 'DLW12B', 'FSW08A', 'PNC12A', 'KHH04A', 'BWD12A', 'YDB12A']
l2 = ['MKH08A', 'FSW08A', 'BWD12A']

print("Present")
for x in l2:
    if x in l1:
        print(x)

print("Not present")
for x in l2:
    if x not in l1:
        print(x)

第一个“for”循环打印出l2中也存在于l1中的三个成员。我希望第二个循环打印出l2中不在l1中的成员;它根本不打印任何东西。为什么是这样?我用括号等尝试了各种语法技巧,但这很顽固。

1 个答案:

答案 0 :(得分:2)

l2中的每个项都在l1,因此if x not in l1将始终评估为False

>>> l1 = ['MNE11B', 'DLC05A', 'MKH08A', 'PERGDM', 'DLW12B', 'FSW08A', 'PNC12A', 'KHH04A', 'BWD12A', 'YDB12A']
>>> l2 = ['MKH08A', 'FSW08A', 'BWD12A']
>>> for x in l2:
    if x not in l1:
        print(x)


>>> l2.append('XYZ31T')
>>> for x in l2:
    if x not in l1:
        print(x)

XYZ31T