尝试解决简单的练习:使用列表理解,找到两个列表的公共部分,而无需重复。在线找到了解决方案,但不了解最后一点。这是一个复合过滤器,但我不知道“ 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)”有关。
答案 0 :(得分:1)
请注意:
... elem not in c and not c.append(elem)
这部分首先检查elem
是否在c
中(注意:先前声明为c
的先前c = []
),以及是否否,请将其附加到c
。由于list.append
总是返回None
,这是一个假值。之前的not
会将结果转换为True
,因此列表理解也可以使用该元素。
该代码有效地过滤出a
和b
中唯一的公共元素,并且等效于以下代码:
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)始终为真