【Python】进阶学习:列表推导式如何使用两个for循环

【Python】进阶学习:列表推导式如何使用两个for循环

在这里插入图片描述

🌈 个人主页:高斯小哥
🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希望得到您的订阅和支持~
💡 创作高质量博文(平均质量分92+),分享更多关于深度学习、PyTorch、Python领域的优质内容!(希望得到您的关注~)


🌵文章目录🌵

  • 🚀一、引言
  • 🔍二、一个for循环的列表推导式
  • 🔄三、两个for循环的列表推导式
  • 🌈四、列表推导式的嵌套循环与普通循环的对比
  • 🎯五、列表推导式中的条件表达式
  • 🔀六、举一反三:更多应用场景
      • 生成字典列表
      • 生成字符串列表
      • 生成列表的列表(二维列表)
      • 使用列表推导式进行数值计算
  • 📚七、总结与收获

🚀一、引言

  Python的列表推导式(List Comprehension)是一种强大而简洁的工具,它可以用来创建列表。通常,我们可能只使用一个for循环来创建列表,但Python也允许我们在列表推导式中使用两个或更多的for循环。本文将通过通俗易懂的方式,讲解如何在列表推导式中使用两个for循环,并通过实例举一反三,让你看完受益良多。

🔍二、一个for循环的列表推导式

  在开始讨论两个for循环的列表推导式之前,我们先回顾一下一个for循环的列表推导式。其基本语法如下:

[expression for item in iterable]

这里的expression是对item的某种操作,item是从iterable(可迭代对象,如列表、元组、集合、字符串、字典等)中取出的每个元素。

举个例子,假设我们有一个数字列表,想要生成一个新列表,其中的元素是原列表中每个数字的平方:

numbers = [1, 2, 3, 4, 5]
squares = [x**2 for x in numbers]
print(squares)  # 输出: [1, 4, 9, 16, 25]

🔄三、两个for循环的列表推导式

现在,我们来看如何使用两个for循环在列表推导式中。其基本语法如下:

[expression for item1 in iterable1 for item2 in iterable2]

这种结构会首先遍历iterable1中的每一个item1,然后对于每一个item1,它都会遍历iterable2中的每一个item2expression则是对item1item2的某种操作。

假设我们有两个列表,一个是颜色列表,另一个是大小列表。我们想要生成一个新的列表,其中的元素是每种颜色和大小的组合:

colors = ['red', 'green', 'blue']
sizes = ['small', 'medium', 'large']

# 使用两个for循环的列表推导式
combinations = [(color, size) for color in colors for size in sizes]
print(combinations)  # 输出: [('red', 'small'), ('red', 'medium'), ('red', 'large'), ('green', 'small'), ('green', 'medium'), ('green', 'large'), ('blue', 'small'), ('blue', 'medium'), ('blue', 'large')]

这个列表推导式会首先遍历colors列表中的每个颜色,然后在内部循环中遍历sizes列表中的每个大小,生成一个元组(color, size),并添加到新列表中。

🌈四、列表推导式的嵌套循环与普通循环的对比

  为了更好地理解列表推导式中的嵌套循环,我们可以将其与普通的嵌套循环进行比较。以下是一个普通嵌套循环的例子,它实现了与上面列表推导式相同的功能:

colors = ['red', 'green', 'blue']
sizes = ['small', 'medium', 'large']

combinations_normal = []
for color in colors:
    for size in sizes:
        combinations_normal.append((color, size))

print(combinations_normal)  # 输出与列表推导式相同

虽然这两种方式都能达到同样的效果,但列表推导式的语法更简洁,更易于阅读和理解。

🎯五、列表推导式中的条件表达式

  除了基本的操作外,我们还可以在列表推导式中加入条件表达式,进一步筛选结果。条件表达式使用if关键字,并放在for循环之后。

假设我们只想获取大小为’medium’的颜色组合:

colors = ['red', 'green', 'blue']
sizes = ['small', 'medium', 'large']

medium_combinations = [(color, size) for color in colors for size in sizes if size == 'medium']
print(medium_combinations)  # 输出: [('red', 'medium'), ('green', 'medium'), ('blue', 'medium')]

这里,if size == 'medium'是一个条件表达式,它确保只有当size为’medium’时,对应的(color, size)元组才会被添加到新列表中。

🔀六、举一反三:更多应用场景

  列表推导式不仅限于生成元组列表,它还可以用来生成任何类型的列表,包括数字列表、字符串列表、字典列表等。下面再举几个例子:

生成字典列表

keys = ['a', 'b', 'c']
values = [1, 2, 3]

# 使用zip函数和列表推导式生成字典列表
dict_list = [{k: v} for k, v in zip(keys, values)]
print(dict_list)  # 输出: [{'a': 1}, {'b': 2}, {'c': 3}]

生成字符串列表

words = ['hello', 'world', 'python']

# 将每个单词转换为大写,并生成字符串列表
uppercase_words = [word.upper() for word in words]
print(uppercase_words)  # 输出: ['HELLO', 'WORLD', 'PYTHON']

生成列表的列表(二维列表)

rows = 3
cols = 4

# 生成一个3x4的二维列表,初始值都是0
matrix = [[0 for _ in range(cols)] for _ in range(rows)]
print(matrix)  # 输出: [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

使用列表推导式进行数值计算

numbers = [1, 2, 3, 4, 5]

# 计算列表中每个数字的平方根(使用math库)
import math
square_roots = [math.sqrt(num) for num in numbers]
print(square_roots)  # 输出: [1.0, 1.4142135623730951, 1.7320508075688772, 2.0, 2.23606797749979]

📚七、总结与收获

  通过本文的学习,我们掌握了如何在Python的列表推导式中使用两个for循环,并通过实例展示了其强大的功能和灵活性。列表推导式不仅使代码更加简洁易读,而且提高了编程效率。通过举一反三的方式,我们还探索了列表推导式在更多应用场景中的使用,如生成字典列表、字符串列表、二维列表以及进行数值计算等。

  在使用列表推导式时,要注意保持代码的清晰和可读性,避免过度嵌套和复杂的表达式。同时,也要善于利用条件表达式对结果进行筛选,以得到更符合需求的结果。

  希望本文对你有所启发,让你在Python编程的道路上更进一步。通过不断实践和探索,你可以发现更多列表推导式的妙用,并将其应用于实际项目中,提升编程效率和代码质量。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux多线程之线程互斥

(。・∀・)ノ゙嗨!你好这里是ky233的主页:这里是ky233的主页,欢迎光临~https://blog.csdn.net/ky233?typeblog 点个关注不迷路⌯▾⌯ 目录 一、互斥 1.线程间的互斥相关背景概念 2.互…

canvas实现水印逻辑分析

目录 效果图一、相关文档二、分析三、实现1、将水印文字转为水印图片2、给刚生成的水印图片加入旋转以及间隔(1)旋转位移(2)间隔位移(3)最后使用toDataURL导出为png图片 3、将生成的水印图片依次排布在需要…

Python实现一个简单的主机-路由器结构(计算机网络)

说明 本系统模拟实现了一个路由器与两个主机节点。该路由器将接收原始以太网帧,并像真正的路由器一样处理它们:将它们转发到正确的传出接口,处理以太网帧,处理 IPv4 分组,处理 ARP分组,处理 ICMP 分组&…

Crow 编译和环境搭建

Crow与其说是编译,倒不如说是环境搭建。Crow只需要包含头文件,所以不用编译生成lib。 Crow环境搭建 boost(可以不编译boost,只需要boost头文件即可)asio (可以不编译,直接包含头文件。不能直接…

事务【MySQL】

稍等更新图片。。。。 事务的概念 引入 在 A 转账 100 元给 B 的过程中,如果在 A 的账户已经减去了 100 元,B 的账户还未加上 100 元之前断网,那么这 100 元将会凭空消失。对于转账这件事,转出和转入这两件事应该是绑定在一起的…

C语言——函数指针——函数指针变量(详解)

函数指针变量 函数指针变量的作用 函数指针变量是指向函数的指针,它可以用来存储函数的地址,并且可以通过该指针调用相应的函数。函数指针变量的作用主要有以下几个方面: 回调函数:函数指针变量可以作为参数传递给其他函数&…

Docker基础教程 - 10 常用容器部署-Redis

更好的阅读体验:点这里 ( www.doubibiji.com ) 10 常用容器部署-Redis 下面介绍一下常用容器的部署。可以先简单了解下,用到再来详细查看。 在 Docker 中部署 Redis 容器。 10.1 搜索镜像 首先搜索镜像,命令&…

强大的项目管理软件:OmniPlan Pro 4 mac中文版

OmniPlan Pro 4 mac中文版是由The Omni Group为macOS和iOS操作系统开发的一款专业级项目管理软件。它允许用户创建和管理复杂的项目,从定义任务、分配资源到跟踪进度和生成报告,一应俱全。 这款软件提供了一系列强大的工具,帮助用户进行高效…

集合框架(一)Set系列集合

Set<E>是一个接口 特点 无序&#xff1a;添加数据的顺序和获取出的数据顺序不一致&#xff1b;不重复&#xff0c;无索引 注意&#xff1a;Set要用到的常用方法&#xff0c;基本上就是collection提供的!自己几乎没有额外新增一些常用功能! HashSet集合的底层原理 前置知…

GPU 和并行计算

还是那句话&#xff0c;互联网领域遇到的大多数问题&#xff0c;在现实世界早就有了解法&#xff0c;今天再分享一个。 视频来自安阳市最后的朋克&#xff0c;张教练的实拍&#xff0c;视频中展示的是血糕&#xff0c;安阳市特产&#xff0c;不了解的可以将其等同于 “一种必须…

【JavaScript】JavaScript 变量 ① ( JavaScript 变量概念 | 变量声明 | 变量类型 | 变量初始化 | ES6 简介 )

文章目录 一、JavaScript 变量1、变量概念2、变量声明3、ES6 简介4、变量类型5、变量初始化 二、JavaScript 变量示例1、代码示例2、展示效果 一、JavaScript 变量 1、变量概念 JavaScript 变量 是用于 存储数据 的 容器 , 通过 变量名称 , 可以 获取 / 修改 变量 中的数据 ; …

Util工具类功能设计与类设计(http模块一)

目录 类功能 类定义 类实现 编译测试 Split分割字符串测试 ReadFile读取测试 WriteFile写入测试 UrlEncode编码测试 UrlDecode编码测试 StatuDesc状态码信息获取测试 ExtMime后缀名获取文件mime测试 IsDirectory&IsRegular测试 VaildPath请求路径有效性判断测…

Day33-计算机基础3

Day33-计算机基础3 1.根据TCP/IP进行Linux内核参数优化1.1 例1&#xff1a;调整访问服务端的【客户端】的动态端口范围 &#xff0c;LVS&#xff08;10-50万并发&#xff09;&#xff0c;NGINX负载&#xff0c;SQUID缓存服务,1.2 企业案例&#xff1a;DOS攻击的案例&#xff1a…

工资低适合下班做的6大副业,每一个都值得尝试!

2024年是最适合发展个人副业的时候&#xff01;无论你是否有全职工作&#xff0c;如果你的主业还不能满足你的成就感&#xff0c;还不能满足你的生活需求&#xff0c;这6个下班可以做的副业都很值得尝试&#xff01; 千金宝库做简单的网络任务 近年来&#xff0c;随着互联网技…

算法详解——leetcode150(逆波兰表达式)

欢迎来看博主的算法讲解 博主ID&#xff1a;代码小豪 文章目录 逆波兰表达式逆波兰表达式的作用代码将中缀表达式转换成后缀表达式文末代码 逆波兰表达式 先来看看leetcode当中的原题 大多数人初见逆波兰表达式的时候大都一脸懵逼&#xff0c;因为与平时常见的表达式不同&am…

C语言学习笔记,学懂C语言,看这篇就够了!(中)

附上视频链接&#xff1a;X站的C语言教程 目录 第8章、函数8.1 函数是什么8.2 函数的分类8.2.1 库函数8.2.1.1 如何使用库函数 8.2.2 自定义函数 8.3 函数参数8.3.1 实际参数(实参)8.3.2 形式参数(形参) 8.4 函数调用8.4.1 传值调用8.4.2 传址调用8.4.3 练习 8.5 函数的嵌套调…

如何使用ArcGIS Pro进行坡度分析

坡度分析是地理信息系统中一种常见的空间分析方法&#xff0c;用于计算地表或地形的坡度&#xff0c;这里为大家介绍一下如何使用ArcGIS Pro进行坡度分析&#xff0c;希望能对你有所帮助。 数据来源 教程所使用的数据是从水经微图中下载的DEM数据&#xff0c;除了DEM数据&…

Python爬虫:http和https介绍及请求

HTTP和HTTPS 学习目标&#xff1a; 记忆 http、https的概念和区别记忆 浏览器发送http请求的过程记忆 http请求头的形式记忆 http响应头的形式了解 http响应状态码 1 为什么要复习http和https 在发送请求&#xff0c;获取响应的过程中 就是发送http或https的请求&#xff0c…

自然语言发展历程

一、基础知识 自然语言处理&#xff1a;能够让计算理解人类的语言。 检测计算机是否智能化的方法&#xff1a;图灵测试 自然语言处理相关基础点&#xff1a; 基础点1——词表示问题&#xff1a; 1、词表示&#xff1a;把自然语言中最基本的语言单位——词&#xff0c;将它转…

中国电子学会2021年9月份青少年软件编程Sc ratch图形化等级考试试卷四级真题

【 单选题 】 1.下面哪个选项程序可以交换下图列表中第2项和第3项的位置&#xff1f; A&#xff1a; B&#xff1a; C&#xff1a; D&#xff1a; 2.雷峰塔景区的门票价格政策是&#xff1a;成人40元/人&#xff1b;6周岁&#xff08;含6周岁&#xff09;以下的实行免票&#…