过滤器和列表理解之间的区别

Yon*_*nik 5 python list-comprehension list filter

我使用的是Python 3,我的问题是为什么输出不同?

print([x * x for x in range(2, 5, 2) if x % 4 == 0]) # returns [16]

q = [x * x for x in range(2, 5, 2)]
print(list(filter(lambda x: x % 4 == 0, q))) # returns [4, 16]
Run Code Online (Sandbox Code Playgroud)

El'*_*man 1

在前者中,中的每一项都[2,4]根据 进行检查x % 4 == 0。在后者中,filter将 lambda 应用于 中的每个项目q,这不是 [2,4],而是[4,16]。因此,x % 4 == 0返回 true 两次。