python - 任何人都可以解释在 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-expressions
[1] https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions
推荐阅读
- ruby-on-rails - 如何为 Rails 公用文件夹中的所有文件创建路径?
- python - 如何在给定时间后关闭 matplotlib 动画窗口?
- android - 当我运行 Android 项目时,所有组件都相互重叠
- angular - 当我在 Angular 应用程序中单击图标时,如何将与特定元素相关的特定值传递到列表中?
- go - 无法在给定类型的类型定义上调用方法
- python - Pandas 数据框 - 数据中有重复项,但重复项不在同一列中
- xamarin - Xamarin Forms Android Autosize Label TextCompat pre android 8不会自动调整文本大小
- javascript - 是否可以将现代 React.js 组件集成到 ES5 AngularJs 应用程序中?
- spring - Spring-Security 中的 persistent_logins
- python - ModuleNotFoundError:没有名为“pymc3”的模块