Python列表推导式:嵌套用法详解

Python列表推导式:嵌套用法详解

    • 1. 什么是列表推导式?
      • 举个例子:
    • 2. 什么是嵌套列表推导式?
      • 举个例子:
    • 3. 嵌套列表推导式的语法
      • 再来一个例子:
    • 4. 嵌套列表推导式的高级用法
      • 4.1 生成矩阵
      • 4.2 过滤嵌套列表
      • 4.3 生成笛卡尔积
    • 5. 嵌套列表推导式的使用场景
      • 5.1 处理多维数据
      • 5.2 生成复杂的数据结构
      • 5.3 数据清洗和转换
    • 6. 总结

大家好!今天我们来深入探讨Python中的列表推导式(List Comprehension),特别是它的嵌套用法。无论你是刚刚开始学习Python的小学生,还是已经入门但想进一步提升的初级程序员,嵌套列表推导式都是一个非常实用的技能。它可以让你的代码更简洁、更高效,同时也能处理更复杂的数据结构。

1. 什么是列表推导式?

在开始之前,我们先简单回顾一下什么是列表推导式。列表推导式是一种用一行代码生成列表的方法,它比传统的for循环更简洁。

举个例子:

假设我们想创建一个包含1到5的数字的列表:

numbers = [i for i in range(1, 6)]
print(numbers)

输出结果是:

[1, 2, 3, 4, 5]

是不是很简单?接下来,我们重点学习嵌套列表推导式


2. 什么是嵌套列表推导式?

嵌套列表推导式是指在列表推导式中嵌套使用for循环。它可以用来处理多维数据结构,比如二维列表、矩阵等。嵌套列表推导式可以让代码更简洁,同时也能处理更复杂的数据生成和转换。

举个例子:

假设我们想创建一个包含1到3的数字的二维列表,每个子列表包含1到3的数字:

nested_list = [[i, j] for i in range(1, 4) for j in range(1, 4)]
print(nested_list)

输出结果是:

[[1, 1], [1, 2], [1, 3], [2, 1], [2, 2], [2, 3], [3, 1], [3, 2], [3, 3]]

在这个例子中,我们使用了两个for循环来生成一个二维列表。每个ij的组合都被添加到列表中。


3. 嵌套列表推导式的语法

嵌套列表推导式的语法非常简单:

[表达式 for 外层元素 in 外层可迭代对象 for 内层元素 in 内层可迭代对象]
  • 表达式:这是你想要添加到列表中的内容。
  • 外层元素:这是外层for循环中使用的变量名。
  • 内层元素:这是内层for循环中使用的变量名。
  • 外层可迭代对象内层可迭代对象:这是你想要遍历的对象,比如列表、字符串、范围(range)等。

再来一个例子:

假设我们想创建一个包含所有可能的两位数组合的列表:

combinations = [(i, j) for i in range(1, 4) for j in range(1, 4)]
print(combinations)

输出结果是:

[(1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 3), (3, 1), (3, 2), (3, 3)]

4. 嵌套列表推导式的高级用法

4.1 生成矩阵

嵌套列表推导式非常适合用来生成矩阵。比如,我们想创建一个3x3的矩阵,每个元素的值是它的行号和列号的乘积:

matrix = [[i * j for j in range(1, 4)] for i in range(1, 4)]
print(matrix)

输出结果是:

[[1, 2, 3], [2, 4, 6], [3, 6, 9]]

在这个例子中,外层循环控制行,内层循环控制列,生成了一个3x3的矩阵。

4.2 过滤嵌套列表

嵌套列表推导式还可以用来过滤嵌套结构中的元素。比如,我们有一个二维列表,我们只想保留其中大于5的元素:

nested_list = [[1, 4, 6], [2, 8, 3], [9, 0, 5]]
filtered_list = [[num for num in sublist if num > 5] for sublist in nested_list]
print(filtered_list)

输出结果是:

[[6], [8], [9]]

4.3 生成笛卡尔积

嵌套列表推导式还可以用来生成两个列表的笛卡尔积。比如,我们有两个列表[1, 2, 3]['a', 'b', 'c'],我们想生成所有可能的组合:

cartesian_product = [(x, y) for x in [1, 2, 3] for y in ['a', 'b', 'c']]
print(cartesian_product)

输出结果是:

[(1, 'a'), (1, 'b'), (1, 'c'), (2, 'a'), (2, 'b'), (2, 'c'), (3, 'a'), (3, 'b'), (3, 'c')]

5. 嵌套列表推导式的使用场景

5.1 处理多维数据

当你需要处理多维数据(比如矩阵、表格)时,嵌套列表推导式是一个非常方便的工具。它可以让你快速生成、转换或过滤多维数据。

5.2 生成复杂的数据结构

当你需要生成复杂的数据结构(比如笛卡尔积、组合)时,嵌套列表推导式可以让你的代码更简洁、更高效。

5.3 数据清洗和转换

当你需要对嵌套数据进行清洗或转换时,嵌套列表推导式也非常有用。比如,将一个二维列表中的所有字符串转换为大写:

nested_strings = [["apple", "banana"], ["cherry", "date"]]
uppercase_strings = [[word.upper() for word in sublist] for sublist in nested_strings]
print(uppercase_strings)

输出结果是:

[['APPLE', 'BANANA'], ['CHERRY', 'DATE']]

6. 总结

嵌套列表推导式是Python中一个非常强大且简洁的工具,它可以帮助我们快速生成多维数据、处理复杂的数据结构、过滤嵌套数据等。无论你是初学者还是已经有一定经验的程序员,掌握嵌套列表推导式都能让你的代码更简洁、更高效。

希望这篇文章能帮助你理解并掌握嵌套列表推导式的用法。如果你有任何问题或想了解更多,欢迎在评论区留言!

Happy Coding! 🚀

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

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

相关文章

Ubuntu如何下载nvidia驱动和Cuda Toolkit

Ubuntu如何下载nvidia驱动和Cuda Toolkit 前言 ‍ 手快不小心把 nvidia​ 的某个东西删除了,现在不得不全部卸载后再重新安装了。 我再也不敢在不确认内容的情况下,确认删除了… ‍ Note: ‍ 笔者环境为 Ubuntu 24.04LTS​ ‍ ‍ 目录 ‍ 文章…

Ubuntu系统安装MySQL

使用在线方式安装 更新软件包 sudo apt update安装MySQL服务器 # 查看可使用的安装包 sudo apt search mysql-server安装指定版本的MySQL # 安装指定版本 sudo apt install -y mysql-server-8.0如果不加-y 会在安装过程中,系统将提示你设置MySQL的root密码。记住…

最大质因子序列

最大质因子序列 C语言代码C 代码Java代码Python代码 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 任意输入两个正整数m, n (1 < m < n < 5000)&#xff0c;依次输出m到n之间每个数的最大质因子&#xff08;包括m和n&#xff1b;…

C语言中信号量:<semaphore.h>头文件

<semaphore.h> 是一个 POSIX 标准定义的头文件&#xff0c;用于提供信号量&#xff08;semaphore&#xff09;的接口。信号量是用于线程或进程间同步的一种机制&#xff0c;可以控制访问共享资源的线程数目&#xff0c;广泛应用于多线程和多进程编程。 本文将详细介绍 &…

Netcat:网络中的瑞士军刀

免责声明&#xff1a;使用本教程或工具&#xff0c;用户必须遵守所有适用的法律和法规&#xff0c;并且用户应自行承担所有风险和责任。 文章目录 一、引言二、简述三、Netcat功能&#xff1f;四、参数选项五、Netcat 的常见功能六、高级用法多连接处理创建简单的代理 七、Netc…

GhostRace: Exploiting and Mitigating Speculative Race Conditions-记录

文章目录 论文背景Spectre-PHT&#xff08;Transient Execution &#xff09;Concurrency BugsSRC/SCUAF和实验条件 流程Creating an Unbounded UAF WindowCrafting Speculative Race ConditionsExploiting Speculative Race Conditions poc修复 论文 https://www.usenix.org/…

Spring Boot 中使用 Mybatis Plus

Spring Boot 中使用 Mybatis Plus 在现代的企业级开发中&#xff0c;MyBatis Plus 是 MyBatis 的增强工具&#xff0c;它简化了很多常见的数据库操作。通过 Spring Boot 集成 MyBatis Plus&#xff0c;可以快速构建高效、简洁的数据库操作层。本文将介绍如何在 Spring Boot 项…

LeetCode:209. 长度最小的子数组(滑动窗口 Java)

目录 209. 长度最小的子数组 题目描述&#xff1a; 实现原理与解析&#xff1a; 滑动窗口 原理思路&#xff1a; 209. 长度最小的子数组 题目描述&#xff1a; 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的…

【SpringBoot 调度任务】

在 Spring Boot 中实现调度任务&#xff08;Scheduled Tasks&#xff09;&#xff0c;通过使用 EnableScheduling 和 Scheduled 注解来完成。 添加依赖启用调度任务支持创建调度任务运行应用程序 添加依赖 pom.xml 文件中有以下依赖项&#xff1a; <dependency><gro…

MyBatis接口绑定的实现方式

MyBatis 提供了几种将 SQL 语句与接口方法绑定的方式&#xff0c;以下是一些常见的实现方式&#xff1a; 1. XML 配置文件方式 这是 MyBatis 最传统的接口绑定方式&#xff0c;通过 XML 配置文件来定义 SQL 语句和接口方法之间的映射关系。 实现步骤&#xff1a; 定义一个 Mapp…

VTK智能指针

文章目录 一、VTK中的New函数二、引用计数三、VTK中的智能指针四、运行时类型识别 一、VTK中的New函数 在 VTK&#xff08;Visualization Toolkit&#xff09;中&#xff0c;New() 函数是创建 VTK 对象的主要方式。它是每个 VTK 类的一个静态方法&#xff0c;专门用于分配和初…

ai绘图丨中国新年春节背景第一弹(附关键词

一、引言 随着春节的临近&#xff0c;节日的氛围愈发浓厚。在电商、社交媒体宣传或者个人创作等诸多场景中&#xff0c;一张精美的中国新年春节背景图都能为作品增色不少。如今&#xff0c;借助 AI 绘图技术&#xff0c;我们能够轻松地创作出独具特色的春节背景图。本文将以 “…

计算机学习

不要只盯着计算机语言学习&#xff0c;你现在已经学习了C语言和Java&#xff0c;暑假又规划学习Python&#xff0c;最后你掌握的就是计算机语言包而已。 2. 建议你找一门想要深挖的语言&#xff0c;沿着这个方向继续往后学习知识就行。计算机语言是学不完的&#xff0c;而未来就…

unique_ptr 智能指针

unique_ptr 智能指针 文章目录 unique_ptr 智能指针std::unique_ptr 的特性初始化转移所有权&#xff08;移动语义&#xff09;访问和修改资源删除器 std::unique_ptr 是 C 标准库中的一部分&#xff0c;位于 <memory> 头文件中。它的“唯一性”&#xff08;unique&#…

鸿蒙项目云捐助第七讲鸿蒙App应用的首页推荐模块布局的实现

鸿蒙项目云捐助第七讲鸿蒙App应用的首页推荐模块布局的实现 最后设置首页的推荐模块&#xff0c;参考模板如下图所示。 一、首页热门推荐模块的实现 对于热门推荐模块&#xff0c;先有上面的小标题栏&#xff0c;这里的标题栏也有一个小图标&#xff0c;首先从“百度图库”中…

NPE的一些理解

什么是 NullPointerException&#xff1f; NullPointerException 是 Java 中的一种运行时异常&#xff0c;表示程序试图对一个 null 对象执行某种操作时发生的错误。例如&#xff0c;访问一个为 null 的对象的方法或属性。 常见导致 NPE 的场景 以下是一些典型会导致 NPE 的…

电子应用设计方案-58:智能沙发系统方案设计

智能沙发系统方案设计 一、引言 智能沙发作为一种融合了舒适与科技的家居产品&#xff0c;旨在为用户提供更加便捷、舒适和个性化的体验。本方案将详细介绍智能沙发系统的设计思路和功能实现。 二、系统概述 1. 系统目标 - 实现多种舒适的姿势调节&#xff0c;满足不同用户的…

【vue-codemirror】Vue中强大的编辑器插件--vue-codemirror

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

Linux下学【MySQL】所有常用类型详解( 配实操图 通俗易懂 )

每日激励&#xff1a;“当你觉得你会幸运时&#xff0c;幸运就会眷顾你&#xff0c;所以努力吧&#xff0c;只要你把事情做好&#xff0c;并觉得你会幸运&#xff0c;你将会变得幸运且充实。” 绪论​&#xff1a; 本章继续学习MySQL的知识&#xff0c;本章主要讲到mysql中的所…

迁移学习中模型训练加速(以mllm模型为例),提速15%以上

根据模型训练过程的显存占用实测的分析,一个1g参数的模型(存储占用4g)训练大约需要20g的显存,其中梯度值占用的显存约一半。博主本意是想实现在迁移学习(冻结部分参数)中模型显存占用的降低,结果不太满意,只能实现训练速度提升,但无法实现显存占用优化。预计是在现有的…