列表推导式和filter不解

问题遇到的现象和发生背景

求问为什么这两个代码为什么相等,for前面的那个x是干嘛用的

问题相关代码,请勿粘贴截图

list1 = list(filter(lambda x:x%3==0 , range(101)))
[x for x in range(1,100)if x%3==0]

运行结果及报错内容

[3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99]

我的解答思路和尝试过的方法

type(x for x in range(1,100)if x%3==0)
<class 'generator'>
type(for x in range(1,100)if x%3==0)
SyntaxError: invalid syntax

我想要达到的结果

[x for x in range(1,100)if x%3==0]相当于

lst = []
for i in range(1, 100):
    if i % 3 == 0:
        lst.append(i)

list(filter(lambda x:x%3==0 , range(101))) 其实就是对于range(101)即0~100每个元素x 如果x%3==0 那就保存下来。

type(x for x in range(1,100)if x%3==0)
<class 'generator'> 因为这本身是一个generator(生成器)
type(for x in range(1,100)if x%3==0)
SyntaxError: invalid syntax 这个错是因为你for循环里面只写了个if 什么事也没干

感觉你对生成器 迭代器 推导式 匿名函数 filter() 不太了解 可以去找找学习一下


可以查看手册:python- 列表推导式 中的内容