高级数据结构:掌握Python中的高效编程技巧

学习目标

通过本课程,学员将深入了解Python中的高级数据结构,包括列表推导式、字典推导式、集合推导式和生成器表达式。学员将学习如何利用这些结构来编写更简洁、更高效的代码,并了解它们在实际项目中的应用。

相关知识点

高级数据结构

学习内容

1 高级数据结构

1.1 列表推导式:简化循环逻辑

列表推导式是Python中一种非常强大的特性,它允许以一种非常简洁的方式创建列表。列表推导式的基本形式是[expression for item in iterable],其中expression是对item进行操作的表达式,iterable是一个可迭代对象,如列表、元组、字符串等。

1.1.1 基本使用

列表推导式可以用来替代传统的循环结构,使代码更加简洁。例如,如果想要创建一个包含1到10的平方数的列表,可以使用传统的循环方式:

squares = []
for i in range(1, 11):squares.append(i * i)
print(squares)

使用列表推导式,同样的任务可以这样完成:

squares = [i * i for i in range(1, 11)]
print(squares)
1.1.2 条件过滤

列表推导式还支持条件过滤,即在创建列表时根据条件选择性地添加元素。例如,如果只想要1到10中偶数的平方数,可以这样做:

even_squares = [i * i for i in range(1, 11) if i % 2 == 0]
print(even_squares)
1.1.3 嵌套循环

列表推导式还可以包含嵌套循环,这在处理多维数据时非常有用。例如,如果有两个列表,想要创建一个包含所有可能组合的列表,可以这样做:

list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']
combinations = [(x, y) for x in list1 for y in list2]
print(combinations)
1.2 字典推导式:高效创建字典

字典推导式与列表推导式类似,但用于创建字典。字典推导式的基本形式是{key_expression: value_expression for item in iterable},其中key_expression和value_expression分别是对item进行操作以生成键和值的表达式。

1.2.1 基本使用

字典推导式可以用来快速创建字典。例如,如果有一个列表,想要创建一个字典,其中键是列表中的元素,值是元素的平方,可以这样做:

numbers = [1, 2, 3, 4, 5]
squares_dict = {x: x * x for x in numbers}
print(squares_dict)
1.2.2 条件过滤

字典推导式同样支持条件过滤。例如,如果只想要1到5中偶数的平方数作为字典的值,可以这样做:

even_squares_dict = {x: x * x for x in numbers if x % 2 == 0}
print(even_squares_dict)
1.3 生成器表达式:节省内存的高效方式

生成器表达式与列表推导式和字典推导式类似,但生成器表达式不立即创建一个完整的列表或字典,而是返回一个生成器对象,该对象可以在需要时生成值。生成器表达式的基本形式是(expression for item in iterable)。

1.3.1 基本使用

生成器表达式可以用来创建生成器对象,这些对象在迭代时按需生成值,从而节省内存。例如,如果想要创建一个生成1到10的平方数的生成器,可以这样做:

squares_gen = (i * i for i in range(1, 11))
for square in squares_gen:print(square)
1.3.2 与列表推导式的对比

生成器表达式和列表推导式的主要区别在于内存使用。列表推导式会立即创建一个完整的列表,占用大量内存,而生成器表达式只在需要时生成值,因此更加节省内存。例如,如果处理一个非常大的数据集,使用生成器表达式可以避免内存溢出:

# 使用列表推导式,可能会导致内存溢出
# large_list = [i * i for i in range(1, 10000000)]# 使用生成器表达式,按需生成值,节省内存
large_gen = (i * i for i in range(1, 10000000))
for i, square in enumerate(large_gen):if i >= 10:  # 只打印前10个值breakprint(square)

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

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

相关文章

【C++】Stack and Queue and Functor

本文是小编巩固自身而作,如有错误,欢迎指出!本次我们介绍STL中的stack和queue和其相关的一些容器和仿函数一.stack and queue1.适配器stack和queue其实不是真正意义上的容器,而是容器适配器,而容器适配器又是什么呢&am…

Python爬虫实战:研究OpenCV技术构建图像数据处理系统

1. 引言 1.1 研究背景 在当今数字化时代,图像作为一种重要的信息载体,广泛存在于各类网站、社交媒体和在线平台中。这些图像数据涵盖了从自然风光、人物肖像到商品展示、新闻事件等丰富内容,为数据分析和模式识别提供了宝贵的资源。随着计算机视觉技术的快速发展,对大规模…

电感矩阵-信号完整性分析

电感矩阵:正如电容矩阵用于存储许多信号路径和返回路径的所有电容量,我们也需要一个矩阵存储许多导线的回路自感和回路互感值。需要牢记的是,这里的电感元件是回路电感。当信号沿传输线传播时,电流回路沿信号路径传输,然后立即从返…

JUC相关知识点总结

Java JUC(java.util.concurrent)是Java并发编程的核心工具包,提供了丰富的并发工具类和框架。以下是JUC的主要知识点,按难易程度分类,供你参考: 1. 基础概念与工具类 1.1 并发与并行(易&#x…

激光频率梳 3D 测量方案革新:攻克光学扫描遮挡,130mm 深孔测量精度达 2um

一、深孔测量的光学遮挡难题在精密制造领域,130mm 级深孔(如航空发动机燃油孔、模具冷却孔)的 3D 测量长期受困于光学遮挡。传统激光扫描技术依赖直射光束,当深径比超过 10:1 时,孔壁中下部形成大量扫描盲区&#xff0…

clickhouse 中文数据的正则匹配

中文数据的正则匹配 在ClickHouse中,正则匹配通常用于数据的筛选、格式化等操作。以下是一些常用的正则匹配技巧: 1. 匹配中文字符 要匹配中文字符,可以使用以下正则表达式: SELECT * FROM my_table WHERE my_column REGEXP [\\x{4e00}-\\x{9fa5}];这里的 \\x{4e00}-\\…

[驱动开发篇] Can通信进阶 --- CanFD 的三次采样

驱动开发篇] Can通信进阶 --- Can报文的三次采样一、CAN FD的采样次数1.1. 标准规定1.2. 传统标准CAN采样1.3. CAN FD的采样策略1.3.1. 基础采样策略1.4. 配置位置1.5. 常见步骤二、CAN FD与标准CAN在采样机制上的主要区别三、使用建议四. 芯片厂商实现4.1. 实际市面情况4.2. 例…

分布式文件系统06-分布式中间件弹性扩容与rebalance冲平衡

分布式中间件弹性扩容与rebalance冲平衡176_如果宕机的数据节点事后再次重启会发生什么事情?某个之前某个宕机的数据节点DataNode-A又重启后,肯定会再次注册,并进行全量上报的流程,此时,就会导致DataNode-A上的文件副本…

芯祥科技:工业/车规级BMS芯片厂商 规格选型对比

芯祥科技公司专注于工业和车规级BMS芯片,电源芯片及可编程模拟芯片的研发与销售,客户遍及新能源储能,汽车,电脑,服务器及电动工具等领域。并具有创业公司成功经验,平均具有逾17年以上的芯片研发和市场销售经…

莫队基础(Mo‘s algorithm)

莫队算法简介 莫队算法是一种用于高效处理离线区间查询问题的算法,由莫涛(Mo Tao)在2009年提出。其核心思想是通过对查询区间进行分块和排序,利用前一次查询的结果来减少计算量,从而将时间复杂度优化至接近线性。 莫…

板卡两个ADC,一个JESD204b sync正常,另一个JESD204B同步不上的问题

目录 1.问题来源: 2.问题分析 进一步测试表现: 抓取204B高速链路数据如上所示。 说明不是配置流程的问题 1.问题来源: 在工控机上和部分电脑上面出现时钟锁不住的现象,无法正常使用板卡。 经过分析,发现板卡上有两片ADC,其中一片的ADC的sync信号经过测量,是正常的,…

Android10 系统休眠调试相关

Android10 系统休眠调试相关实时打印休眠日志(实测好像没作用):echo 1 > /sys/module/printk/parameters/console_suspend查看唤醒锁:cat sys/power/wake_lock msm8953_64:/ # cat sys/power/wake_lock PowerManager.SuspendLockout PowerManagerServ…

一文掌握Bard机器翻译,以及用python调用的4种方式(现已升级为 Gemini)

文章目录一、Bard机器翻译概述1.1. Bard机器翻译介绍1.2 Bard机器翻译的核心特点1.3 技术背景1.4 与同类模型对比二、Bard机器翻译案例2.1 官方 REST API(推荐生产)2.2 通过Google Cloud API调用2.3 私有化部署方案2.4 开源镜像 PyBard(无需 …

Kafka-Eagle 安装

Kafka-Eagle官网 1)上传压缩包 kafka-eagle-bin-2.0.8.tar.gz 到集群第一台的/opt/modules 目录 2)解压到本地 tar -zxvf kafka-eagle-bin-2.0.8.tar.gz 3)将 efak-web-2.0.8-bin.tar.gz 解压至/opt/installs cd kafka-eagle-bin-2.0.8 …

接口请求的后台发起确认

场景讲解做业务开发时经常遇到这些场景,在后端代码执行命中了些业务规则,需要前端用户确认一下再往下执行。示例1:后端判断申请1笔超过5万的资金时会发起监管流程,告诉前端操作用户风险并询问是否确认执行。示例2:数据…

完整学习MySQL

DML 等术语概念 DML(Data Manipulation Language,数据操纵语言): DML主要用于插入、更新、删除和查询数据库中的数据。常见的DML语句包括: INSERT:用于向表中插入新的数据行。UPDATE:用于修改…

大模型笔记1——李宏毅《2025机器学习》第一讲

本篇笔记内容1、学习本节课需要的前置知识了解大模型的训练过程:预训练、后训练、强化学习(2024年生成式AI导论前8讲)了解基础机器学习、深度学习概念(如transformer)(2021年机器学习课程)2、本…

CSS scrollbar-width:轻松定制滚动条宽度的隐藏属性

在前端设计中,滚动条往往是一个容易被忽略的细节。默认的滚动条样式常常与页面设计格格不入,尤其是宽度 —— 过宽的滚动条会挤占内容空间,过窄又可能影响用户操作。而 CSS 的scrollbar-width属性,就像一把 “精细的尺子”&#x…

小迪23年-28~31-js简单回顾

前端-js开发 课堂完结后欲复习巩固也方便后续-重游-故写此篇 从实现功能过渡到涉及的相关知识点 知识点 1、 JS 是前端语言,是可以被浏览器“看到”的,当然也可以被修改啊,被浏览器禁用网页的 JS 功能啊之类的。所以一般都是前后端分离开发&…

JavaScript 概述

JavaScript 是一种高级、解释型编程语言,主要用于网页开发,使其具备动态交互功能。它是网页三大核心技术之一(HTML、CSS、JavaScript),能够直接嵌入 HTML 页面并在浏览器中执行。核心特性动态弱类型语言 JavaScript 是…