Python中的列表推导式和字典推导式:优雅且高效的数据结构生成方式

Python中的列表推导式和字典推导式:优雅且高效的数据结构生成方式

在Python中,列表推导式(List Comprehensions)和字典推导式(Dictionary Comprehensions)是两种强大且优雅的工具,它们允许开发者以简洁明了的方式创建列表和字典。这两种推导式不仅提高了代码的可读性,还优化了代码的执行效率。本文将详细解释这两种推导式的用法,并通过实例展示它们的实用性。

一、列表推导式

列表推导式提供了一种简洁的方式来创建列表。其基本形式如下:

[expression for item in iterable if condition]

这里的expression是对item进行的某种操作或计算,iterable是一个可迭代对象(如列表、元组、字符串等),condition是一个可选的条件表达式。

例如,假设我们有一个数字列表,我们想要创建一个新列表,其中包含原列表中所有偶数的平方。使用列表推导式,我们可以轻松地实现这一目标:

numbers = [1, 2, 3, 4, 5, 6]
squares_of_evens = [x**2 for x in numbers if x % 2 == 0]
print(squares_of_evens)  # 输出: [4, 16, 36]

在这个例子中,x**2是我们要对每个元素执行的操作,numbers是我们的可迭代对象,if x % 2 == 0是我们的条件表达式,用于筛选出偶数。

二、字典推导式

与列表推导式类似,字典推导式提供了一种简洁的方式来创建字典。其基本形式如下:

{key_expr: value_expr for item in iterable if condition}

这里的key_exprvalue_expr分别是字典键和值的表达式,它们可以是基于item的任何有效Python表达式。同样,iterable是一个可迭代对象,condition是一个可选的条件表达式。

例如,假设我们有两个列表,一个包含名字,另一个包含年龄。我们可以使用字典推导式来快速创建一个将名字映射到年龄的字典:

names = ['Alice', 'Bob', 'Charlie']
ages = [25, 30, 35]
name_age_dict = {name: age for name, age in zip(names, ages)}
print(name_age_dict)  # 输出: {'Alice': 25, 'Bob': 30, 'Charlie': 35}

在这个例子中,我们使用了zip函数来将两个列表“压缩”成一个元组列表,然后字典推导式将这些元组转换为字典的键值对。

三、嵌套推导式

推导式还可以嵌套使用,以处理更复杂的数据结构。例如,我们可以使用嵌套的列表推导式来生成一个二维列表(即列表的列表):

matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
transposed = [[row[i] for row in matrix] for i in range(len(matrix[0]))]
print(transposed)  # 输出: [[1, 4, 7], [2, 5, 8], [3, 6, 9]]

在这个例子中,外部的列表推导式遍历原矩阵的列索引,而内部的列表推导式则遍历原矩阵的每一行,从而实现了矩阵的转置。

四、性能与可读性

推导式不仅使代码更加简洁易读,而且在性能上通常也优于等效的循环结构。这是因为推导式在底层进行了优化,可以减少不必要的变量分配和循环开销。然而,这并不意味着推导式总是最佳选择。在处理复杂逻辑或需要多个中间步骤的情况下,使用传统的循环结构可能更加清晰易懂。

五、总结

列表推导式和字典推导式是Python中非常实用的特性,它们允许开发者以简洁明了的方式创建列表和字典。通过掌握这两种推导式,你可以编写出更加优雅和高效的Python代码。在使用推导式时,要注意权衡代码的简洁性和可读性,确保你的代码既高效又易于理解。

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

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

相关文章

分享一个简单的文件下载器

抽空写了一个用于下载文件的控制器类,只需要把文件的路径通过参数name传递到后台即可完成文件下载到本地,非常方便~ 控制器类代码 package cn.edu.sgu.www.download.controller;import cn.edu.sgu.www.download.entity.RequestURI; import org.springfr…

Kotlin 中,扩展函数(Extension Functions)

在 Kotlin 中,扩展函数(Extension Functions)是用于向已有的类添加新功能而无需继承或使用装饰模式的一个特性。这允许你通过更自然的语法为现有类型添加方法。 下面是一个简单的扩展函数示例: // 定义一个扩展函数,…

SAP ABAP 三种汇总方法

1.select sum 汇总 select key1 key2 sum ( case zhiduanwhen 1 then suliang1when 2 then suliang2end ) as cnt from table where satue in (1,2) order by key1 key2 "必有 group by key1 key2 "必有2.loop 汇总 在loo…

kettle从入门到精通 第六十四课 ETL之kettle kettle中执行SQL脚本步骤,使用需当心

1、群里有不定时会有同学反馈执行SQL脚本步骤使用有问题,那么咱们今天一起来学习下该步骤。trans中的执行SQL脚本有两方面功能,使用时需小心,不然很容易踩坑。 官方定义: 翻译: 您可以使用此步骤执行 SQL 脚本&#…

安装TTS被卡住不下载应该怎么操作

安装 TTS 模块时,如果发现下载的依赖项数量很多,安装时间过长,并且卡在某些地方,可以尝试以下方法: 1. 确认依赖项的下载是否完成 在安装过程中,检查是否有依赖项已经下载并安装成功。在大多数情况下&…

回溯法——跳房子

跳房子是小朋友玩的游戏。地面上画出一连串格子,每个格子里有一个整数,小朋友从外面跳入格子,并继续往前跳,直到跳出所有格子。每次跳跃的规则是,可以跳入下一格或下下格或下下下格。怎么跳能让落脚格子里的数的累加和…

数据库管理-第198期 升级Oracle ACE Pro,新赛季继续努力(20240605)

数据库管理198期 2024-06-05 数据库管理-第198期 升级ACE Pro,新赛季继续努力(20240605)1 惊喜2 变化3 Oracle ACE总结 数据库管理-第198期 升级ACE Pro,新赛季继续努力(20240605) 作者:胖头鱼的…

区间预测 | Matlab实现QRBiTCN分位数回归双向时间卷积神经网络注意力机制时序区间预测

Matlab实现QRBiTCN分位数回归双向时间卷积神经网络注意力机制时序区间预测 目录 Matlab实现QRBiTCN分位数回归双向时间卷积神经网络注意力机制时序区间预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现QRBiTCN分位数回归双向时间卷积神经网络注意力机制时序…

实现 Python 服务在执行完毕后主动向前端发送信息,以便前端(例如 Vue.js 应用)可以更新显示

可以通过多种方法实现 Python 服务在执行完毕后主动向前端发送信息,以便前端(例如 Vue.js 应用)可以更新显示。下面介绍几种常见的方法: 1. 使用 WebSockets WebSockets 是一种在客户端和服务器之间建立持久连接的通信协议&…

在网页中调用MSTSC打开远程桌面

1.修改注册表 添加自定义URL协议 MSTSC [HKEY_CLASSES_ROOT\MSTSC]"URL:MSTSCProtocol""URL Protocol"""[HKEY_CLASSES_ROOT\MSTSC\DefaultIcon] "mstsc.exe"[HKEY_CLASSES_ROOT\MSTSC\shell][HKEY_CLASSES_ROOT\MSTSC\shell\open][…

C++ STL std::vector的实现机制【面试】

std::vector 是 C 标准模板库(STL)中的一种序列容器,它封装了动态数组的实现,提供了一系列方法来操作这个动态数组。以下是 std::vector 的一些关键实现机制: 连续内存存储: std::vector 通过一块连续的内存…

51单片机在八位数码管上显示自己学号后八位

1、功能描述 在八位数码管上显示自己学号后八位 2、实验原理 数码管就是通过线路将各个LED灯连接在一起。 P2控制LED的段选, P0控制LED位选。读取时从低位向高位读取,P2_2为高位P2_4为地位,例如P2_4 1; P2_3 0; P2_2 1,那么…

LabVIEW飞机发动机测试与故障诊断系统

LabVIEW飞机发动机测试与故障诊断系统 基于LabVIEW开发了一个飞机发动机测试与故障诊断系统,能够实时监测发动机的运行参数,进行数据采集与分析,并提供故障诊断功能。系统采用高精度传感器和数据采集硬件,适用于发动机的性能测试、…

C++ | Leetcode C++题解之第136题只出现一次的数字

题目&#xff1a; 题解&#xff1a; class Solution { public:int singleNumber(vector<int>& nums) {int ret 0;for (auto e: nums) ret ^ e;return ret;} };

MPU6050篇——温度与角度的读取

一、MPU6050的读写时序 1. MPU6050写时序 1. 首先是IIC的起始信号&#xff0c;也就是&#xff1a; MPU_IIC_Start(); 2. 然后接下来便是发送器件地址以及写命令&#xff1a;其中MPU6050的地址为7位&#xff0c;而八位为一个数据帧&#xff0c;所以在最后一位再加一位是指定…

用户管理的小demo--过滤器filter

1、创建 CharEncodingFilter.java package com.by.filter; import javax.servlet.*; import java.io.IOException; public class CharEncodingFilter implements Filter {Overridepublic void init(FilterConfig filterConfig) throws ServletException {}Overridepublic void …

C++ | Leetcode C++题解之第135题分发糖果

题目&#xff1a; 题解&#xff1a; class Solution { public:int candy(vector<int>& ratings) {int n ratings.size();int ret 1;int inc 1, dec 0, pre 1;for (int i 1; i < n; i) {if (ratings[i] > ratings[i - 1]) {dec 0;pre ratings[i] rati…

python基于flask写后端接口、python接收请求、python作为服务端提供接口、python接收json数据或数组

文章目录 一、Flask 构成二、基于flask写后端接口2.1、接口可以调用其他类成员示例2.2、接口的入参是多个的示例2.3、接口的入参是路径的示例2.4、接口的入参是数组的示例2.5、python接收json数据或数组2.5.1、接口的入参是list的示例,入参是json格式2.5.2、接收json数据2.5.3、…

116页 | 2024年中国金融行业网络安全研究报告(免费下载)

以上是资料简介和目录&#xff0c;如需下载&#xff0c;请前往星球获取&#xff01;&#xff01;&#xff01;

Linux - 深入理解/proc虚拟文件系统:从基础到高级

文章目录 Linux /proc虚拟文件系统/proc/self使用 /proc/self 的优势/proc/self 的使用案例案例1&#xff1a;获取当前进程的状态信息案例2&#xff1a;获取当前进程的命令行参数案例3&#xff1a;获取当前进程的内存映射案例4&#xff1a;获取当前进程的文件描述符 /proc中进程…