谁能解释列表理解的内部工作,用于有if-else的情况,而另一个只有if条件的情况?



我有以下3个表达式:

['-'+i+'-' if int(i)%2==0 else i for i in str(num).strip('-')]~~~~(1(

[i if i in ar and ar[i]>4 for i in s]~~~~~(2(,(其中ar是映射(

[i if i in ar and ar[i]>4 else continue for i in s]~~~~~~(3(

只有表达式(1(有效。其余两个没有。但是,如果我将表达式(2(重写如下:

[i for i in s if i in ar and ar[i]>4],它运行良好。

我有兴趣了解这方面的内部工作。

['-'+i+'-' if int(i)%2==0 else i for i in str(num).strip('-')]之所以工作,是因为其他原因。在这种情况下,它使用条件表达式[0],而不是理解列表的正常语法"列表理解由括号组成,括号中包含一个表达式,后面跟着for子句,然后是零个或多个for或if子句";[1]

正规形式是[expression_statement forloop if_filter],对吧?所以你应该有而不是(2(

[i for i in s if i in ar and ar[i]>4]

它相当于

alist = []
for i in s:
if i in ar and ar[i]>4]:
alist.append(i)

[0]https://docs.python.org/3/reference/expressions.html#conditional-表达式

[1]https://docs.python.org/3/tutorial/datastructures.html#list-综合

相关内容

最新更新