“而不是c.append(x)”在这里如何工作?

时间:2019-01-17 03:13:14

标签: python filtering list-comprehension

尝试解决简单的练习:使用列表理解,找到两个列表的公共部分,而无需重复。在线找到了解决方案,但不了解最后一点。这是一个复合过滤器,但我不知道“ not c.append(elem)”如何解析为布尔值。

from random import randrange

a = []
b = []
c = []

for x in range(randrange(15, 20)):
    a.append(randrange(1, 20))
    b.append(randrange(1, 20))

a.sort()

print(a)
print(b)

c = [elem for elem in a if elem in b and elem not in c and not c.append(elem)]
print(c)

这仅与“而不是c.append(elem)”有关。

2 个答案:

答案 0 :(得分:1)

请注意:

... elem not in c and not c.append(elem)

这部分首先检查elem是否在c中(注意:先前声明为c的先前c = []),以及是否否,请将其附加到c。由于list.append总是返回None,这是一个假值。之前的not会将结果转换为True,因此列表理解也可以使用该元素。

该代码有效地过滤出ab中唯一的公共元素,并且等效于以下代码:

list_comp_result = []
for elem in a:
    if elem in b:
        if elem not in c:
            c.append(elem)  # <-- always None
            list_comp_result.append(elem)

答案 1 :(得分:0)

它仅用于附加元素

c.append(elem) = None

不是c.append(elem)始终为真