python - 列表推导中的多个 if/else
问题描述
我正在尝试学习列表理解并在可迭代对象上使用条件。我不明白我的if
/else
状况如何在此列表中起作用。哪个if
或else
首先工作并打印?
num1 = [5, 10, 15]
num2 = [i**2 if i == 10 else i - 5 if i < 7 else i + 5 for i in num1]
print(num2)
输出:
[0, 100, 20]
解决方案
您在这里拥有的不是带有条件的列表推导(过滤掉推导的某些元素),而是形式的后表达式条件
x = A if (condition) else B
如果(条件)为真,则分配 A,否则分配 B。(语法看起来有点混乱,必须承认,但即使 Python 也并不总是完美的。)您已经设法将其中两个堆叠在里面彼此,像这样:
i**2 if i == 10 else (i-5 if i < 7 else i+5)
从右边阅读:表达式(i-5 if i < 7 else i+5)
会给你i-5
if i<7
,否则你会得到i+5
。无论这是什么值,只要为假,它就会包含在理解i==10
中(因此,对于第一个和第三个列表元素)。
请注意,此构造与列表推导无关;您可以在任何地方使用它(只要i
定义)。
i = 31
x = i**2 if i == 10 else (i-5 if i < 7 else i+5)
为了比较,这是一个真正的条件列表推导:推导将删除等于 10 的值,在结果中留下两个元素。我认为这是您要理解的结构。
num3 = [ i**2 for i in num1 if i != 10 ]
推荐阅读
- java - 开启 GPS 功能 webview
- angular - 角度存储参考数据
- python - Django:如何通过管理员上传、显示、删除图像
- c# - 如何一键分别向多个收件人发送电子邮件
- apache-kafka - Kafka 主题中的消息数
- sed - sed 命令不会在当前 sed 版本的 mac 上运行
- python - PyCharm (Python 3.x) 修改类而不重新运行脚本
- api - 使用量子计算机的框架/API?
- git - 合并分支时的 Git 用户设置为 = 符号而不是当前用户
- javascript - 在 IOS 中使用 react-native 从本地 IP 地址获取时出现异常