Python “怎么做?”;而不是c.附加(x)“;在这里工作?
尝试解决简单的练习:使用列表理解找到两个列表的公共部分,不要重复。在线找到解决方案,但不了解最后一点。这是一个复合过滤器,但我不知道“not c.append(elem)”如何解析为布尔值Python “怎么做?”;而不是c.附加(x)“;在这里工作?,python,filtering,list-comprehension,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.sor
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)”。把它拆开:
... elem not in c and not c.append(elem)
本部分首先检查elem
是否在c
中(注意:前面声明为c=[]
的c
),如果不是,则将其附加到c
。因为list.append
总是返回None
,这是一个错误的值。在将结果转换为True
之前,not
,因此该元素也由列表提取
该代码有效地过滤出a
和b
中唯一的公共元素,并等效于以下代码:
list\u comp\u result=[]
对于a中的元素:
如果b中的元素:
如果元素不在c中:
c、 追加(elem)#仅用于追加elem
c.append(elem) = None
不是c.append(elem)总是正确的这是一种将副作用放入理解的不太好的方式。在这种情况下,你可以使用:d=list(set(a)和set(b))
+如果在处理过程中不使用而不使用c.append(elem)
,c=[]
直到[…]完成,c=[…]的结果。+如果使用而不是c.append(elem)]
则在处理过程中,c更改为code1=``c=[a中的元素如果元素在b中且元素不在c中且元素不在c中追加(元素)]打印(c)``code2=````[a中的元素如果元素在b中且元素不在c中且元素不在c中追加(元素)]打印(c)``code3=``如果元素在b中:如果元素不在c中追加(元素)打印(c)``code1=code2=code3