python表达式推导的问题

a=[x*3 for x in range(5) if x%3==0]
print(a)
为什么输出是
[0,9]
而不是
[0,3,6,9,12]

你的代码相当与下面这一段代码

a=[]
for x in range(5):
        if x%3==0:
            a.append(x*3)
print(a)

a=[x*3 for x in range(5)]

if x%3==0
那么x的取值只能是0和3,124都被过滤掉了呀
你自己拿出IDE把代码粘进去改改再执行,如果电脑上没有安装编译器那就打开网页版在线编辑
先试试print([x*3 for x in range(5)])
再试试print([x for x in range(5)] if x%3==0)
看分别都是什么,不要想当然

先执行的for x in range(5) if x%3==0,只有0,3,然后执行x*3,结果[0,9],效果等同于下面代码:


# a=[x*3 for x in range(5) if x%3==0]
# print(a)
a = []
for x in range(5) :
    if x%3 == 0:
        a.append(x*3)
print(a)