首页 > 解决方案 > 任何人都可以解释在 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],它工作正常。

我有兴趣了解它的内部工作。

标签: pythonlistlist-comprehension

解决方案


['-'+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-expressions

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


推荐阅读