Python列表解析式是否支持 else

Python的列表解析式可以在末尾使用 if 关键字来筛选结果。但是,如果想用条件表表达式对结果进行选择,是否可行?也就是说,在列表解析式中是否可以使用 if...else... 语句。

列表解析式支持else吗?

下面这个列表解析式是无效的:

>>> counts = [2, -1, 4, 7, -3, 6]
>>> sanitized_counts = [n for n in counts if n > 0 else 0]File "<stdin>", line 1sanitized_counts = [n for n in counts if n > 0 else 0]^^^^
SyntaxError: invalid syntax

Python 的列表解析式不支持上面那样使用else关键字。

但是,这并不意味着不能在列表解析式中使用 else,如果按照下面的方法编写代码,就能够正常执行了。

>>> sanitized_counts = [n if n > 0 else 0 for n in counts]

输出结果如下:

>>> sanitized_counts
[2, 0, 4, 7, 0, 6]

这是如何工作的?

Python 的三元运算符

在上面的代码中,那个else实际上并不是解析式的一部分,if也不是。它其实是 Python 版的三元运算符(也称为“三元操作”,更详细内容参阅第 5 章 5.2 节):

>>> n = 5
>>> n if n > 0 else 0
5

这个表达式检查条件表达式 n > 0 ,如果为真,则根据表达式 n 返回结果,如果为假,则根据 else 关键字后面的表达式 0 返回结果。再如:

>>> n = -3
>>> n if n > 0 else 0
0

将这个 Python 版的三元运算符,运用到列表解析式中,就是前面看到的结果:

>>> counts = [2, -1, 4, 7, -3, 6]
>>> sanitized_counts = [n if n > 0 else 0 for n in counts]

那么,照此就可以理解,在上述列表解析式中,n if n > 0 else 0 是三元运算表达式,是一个单一的表达式,它恰好就在解析式内,不是条件表达式中的 if...else... 这样的两个分支。

使列表解析式更易读

为了避免将列表解析中的三元运算符误认为是两个条件分支,可以用下面的形式书写:

>>> sanitized_counts = [(n if n > 0 else 0) for n in counts]

避免复杂的解析式

写代码的要务之一就是可读性,为此,也可以将 n if n > 0 else 0 写到解析式的外面,将其放到一个函数里面。

>>> def negatives_to_zero(n):
...     return n if n > 0 else 0
...
>>> sanitized_counts = [negatives_to_zero(n) for n in counts]

结论

由以上分析可知,Python 的列表解析式不支持 else 关键字。但是,可以通过三元运算符实现条件表达式的功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/500278.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[pdf、epub]260道《软件方法》强化自测题业务建模需求分析共216页(202412更新)

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 260道《软件方法》强化自测题业务建模需求分析共216页&#xff08;202412更新&#xff09; 已上传到本CSDN账号的资源 如果下载不到&#xff0c;也可以访问以下链接&#xff1a; ht…

WireShark抓包学习

1.数据包结构解析 下图中&#xff0c;即为一条条数据包。 点击某一条数据包后可看见该数据的详细信息&#xff0c;包含了物理层、IP层和TCP协议的相关信息。 2.使用捕获过滤器筛选相应的数据包 想要抓包的话&#xff0c;首先第一步就需要使用捕获过滤器找到相应的数据包。WireS…

家用电器销售系统|Java|SSM|JSP|

【技术栈】 1⃣️&#xff1a;架构: B/S、MVC 2⃣️&#xff1a;系统环境&#xff1a;Windowsh/Mac 3⃣️&#xff1a;开发环境&#xff1a;IDEA、JDK1.8、Maven、Mysql5.7 4⃣️&#xff1a;技术栈&#xff1a;Java、Mysql、SSM、Mybatis-Plus、JSP、jquery,html 5⃣️数据库可…

vim里搜索关键字

vim是linux文本编辑器的命令&#xff0c;再vi的基础上做了功能增强 使用方法如下 1. / 关键字, 回车即可, 按n键查找关键字下一个位置 2.? 关键字, 回车即可, 按n键查找关键字下一个位置 3.示例

[JAVA]MyLogger

import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.logging.*;/*** 可以自已定义日志打印格式&#xff0c;这样看起来比较方便些**/ class MyFormatter extends Formatter {Overridepublic String format(LogRecord ar…

HuatuoGPT-o1:基于40K可验证医学问题的两阶段复杂推理增强框架,通过验证器引导和强化学习提升医学模型的推理能力

HuatuoGPT-o1&#xff1a;基于40K可验证医学问题的两阶段复杂推理增强框架&#xff0c;通过验证器引导和强化学习提升医学模型的推理能力 论文大纲理解1. 确认目标2. 分析过程3. 实现步骤4. 效果展示 解法拆解全流程提问俩阶段详细分析 论文&#xff1a;HuatuoGPT-o1, Towards …

springboot中,怎么把对象的空属性转为json的时候过滤掉

全局配置 ObjectMapper java Bean Data Component NoArgsConstructor AllArgsConstructor ConfigurationProperties(prefix "person") public class Person {private String userName;private Boolean boss;private Date birth;private Integer age;private Pet p…

基于TCP的Qt网络通信

基于TCP的Qt网络通信 项目源码&#xff1a;https://github.com/say-Hai/TcpSocketLearn/tree/QTcpSocket 在标准C没有提供专门用于套接字通信的类&#xff0c;所以只能使用操作系统提供的基于C的API函数&#xff0c;但是Qt就不一样了&#xff0c;它是C的一个框架并且里边提供了…

[CCGridW 2023]Performance Modelling of Graph Neural Networks

论文网址&#xff1a;Performance Modelling of Graph Neural Networks | IEEE Conference Publication | IEEE Xplore 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xf…

git reset --hard(重置到当前提交,所有未提交的更改都会被永久丢弃)

git reset --hard 是一个强大的命令&#xff0c;它会将你的工作目录、暂存区和当前分支的 HEAD 指针重置到指定的提交状态&#xff0c;所有未提交的更改都会被永久丢弃。因此&#xff0c;使用这个命令时需要非常小心。 基本用法 重置到当前提交&#xff08;丢弃所有未提交的更…

springboot 整合 rabbitMQ (延迟队列)

前言&#xff1a; 延迟队列是一个内部有序的数据结构&#xff0c;其主要功能体现在其延时特性上。这种队列存储的元素都设定了特定的处理时间&#xff0c;意味着它们需要在规定的时间点或者延迟之后才能被取出并进行相应的处理。简而言之&#xff0c;延时队列被设计用于存放那…

PLC(01)

一.职业规划 电路----------------->电工------------------>电气-------------------plc---------------------DCS--------------------> 机器人 二.交流电直流电的概念 1.交流电AC alternating current 大小方向随时间发生周期性变化 2.直流电 Direct current…

基本算法——分类

目录 创建项目 导入依赖 加载数据 特征选择 学习算法 对新数据分类 评估与预测误差度量 混淆矩阵 通过模型的预测结果生成 ROC 曲线数据 选择分类算法 完整代码 结论 创建项目 首先创建spring boot项目&#xff0c;我这里用的JDK8&#xff0c;springboot2.7.6&…

2024年中国新能源汽车用车发展怎么样 PaperGPT(二)

用车趋势深入分析 接上文&#xff0c;2024年中国新能源汽车用车发展怎么样 PaperGPT&#xff08;一&#xff09;-CSDN博客本文将继续深入探讨新能源汽车的用车强度、充电行为以及充电设施的现状。 用车强度 月均行驶里程&#xff1a;2024年纯电车辆月均行驶超过1500公里&…

典型常见的基于知识蒸馏的目标检测方法总结三

来源&#xff1a;Google学术2023-2024的顶会顶刊论文 NeurIPS 2022&#xff1a;Towards Efficient 3D Object Detection with Knowledge Distillation 为3D目标检测提出了一种知识蒸馏的Benchmark范式&#xff0c;包含feature的KD&#xff0c;Logit的cls和reg的KD&#xff0c…

2024年中国新能源汽车用车发展怎么样 PaperGPT(一)

概述 在国家政策的强力扶持下&#xff0c;2024年中国新能源汽车市场迎来了新的发展机遇。本文将基于《中国新能源汽车用车报告&#xff08;2024年&#xff09;》的数据&#xff0c;对新能源汽车的市场发展和用车趋势概述。 新能源汽车市场发展 政策推动&#xff1a;国家和地…

Ceph 手动部署(CentOS9)

#Ceph手动部署、CentOS9、squid版本、数字版本19.2.0 #部署服务:块、对象、文件 一、部署前规划 1、兼容性确认 2、资源规划 节点类型节点名称操作系统CPU/内存硬盘网络组件安装集群节点CephAdm01CentOS94U/8GOS:40G,OSD:2*100GIP1:192.169.0.9(管理&集群),IP2:…

CUDA与Microsoft Visual Studio不兼容问题

简介&#xff1a;在安装一些 python库时&#xff0c;涉及到第三方库&#xff08;特别是需要引用 C 代码&#xff09;时&#xff0c;通常的安装方式会涉及到编译过程&#xff0c;通常称为"源代码安装"&#xff08;source installation&#xff09;&#xff0c;或是 “…

网络安全 | 企业网络安全管理

网络安全 | 企业网络安全管理 一、前言二、企业网络安全面临的威胁2.1 网络攻击类型2.2 数据泄露风险2.3 恶意软件感染 三、企业网络安全管理的策略与措施3.1 网络架构安全设计3.2 访问控制机制3.3 数据加密技术3.4 员工安全培训 四、企业网络安全监测与应急响应体系4.1 安全监…

算命占卜网php源码/设计书/2025八字运势怎么通过php测算

引言 随着人们对传统文化的重视&#xff0c;八字算命逐渐成为很多人了解命运的方式。为了满足这一需求&#xff0c;设计一个功能丰富且用户友好的八字算命网站显得尤为重要。本文将详细阐述从构思到实施的设计过程&#xff0c;旨在创建一个既具吸引力又富有实用价值的八字算命…