当前位置: 首页 > news >正文

python 之 列表推导式

文章目录

      • 基本结构
        • 示例 1:将列表中的元素乘以 2
      • 添加条件判断
        • 示例 2:筛选出偶数并加倍
      • 嵌套列表推导式
        • 示例 3:生成九九乘法表
      • 使用条件表达式
        • 示例 4:根据条件返回不同的值
      • 镶嵌使用详细介绍
      • 基本结构
      • 示例
        • 生成二维数组
        • 多重筛选和操作
      • 运行顺序
      • 在列表推导式中遍历多个列表
      • 基本结构
      • 示例
        • 两个列表相乘
        • 使用条件过滤
        • 对应元素相加

在这里插入图片描述

列表推导式(List Comprehension)是 Python 中一种简洁而强大的构造列表的方法。它允许使用简单的语法快速生成列表,并且能够包含条件语句,使得代码更加紧凑和易读。

基本结构

列表推导式的基本结构如下:

new_list = [expression for item in iterable]
  • expression:要执行的操作或表达式,用于生成新的列表元素。
  • item:可迭代对象中的每个元素。
  • iterable:用于迭代的对象,如列表、元组、集合、字典等。
示例 1:将列表中的元素乘以 2
original_list = [1, 2, 3, 4, 5]# 使用列表推导式生成新的列表
new_list = [x * 2 for x in original_list]# 输出新的列表
print(new_list)  # 输出:[2, 4, 6, 8, 10]

添加条件判断

列表推导式也可以包含条件判断,根据条件筛选元素。

new_list = [expression for item in iterable if condition]
  • condition:带有 if 关键字的条件语句。
示例 2:筛选出偶数并加倍
original_list = [1, 2, 3, 4, 5, 6, 7, 8, 9]# 使用列表推导式筛选出偶数并加倍
new_list = [x * 2 for x in original_list if x % 2 == 0]# 输出新的列表
print(new_list)  # 输出:[4, 8, 12, 16]

嵌套列表推导式

列表推导式还支持嵌套,可以生成嵌套列表。

示例 3:生成九九乘法表
multiplication_table = [[i * j for j in range(1, 10)] for i in range(1, 10)]# 输出九九乘法表
for row in multiplication_table:print(row)

使用条件表达式

列表推导式也可以包含条件表达式。

new_list = [true_expression if condition else false_expression for item in iterable]
示例 4:根据条件返回不同的值
original_list = [1, 2, 3, 4, 5]# 使用列表推导式根据奇偶性返回不同的值
new_list = ["Even" if x % 2 == 0 else "Odd" for x in original_list]# 输出新的列表
print(new_list)  # 输出:['Odd', 'Even', 'Odd', 'Even', 'Odd']

总的来说,列表推导式是一种非常便利的工具,可以在一行代码中生成列表并进行筛选、转换操作。它使得代码更紧凑、可读性更高。

镶嵌使用详细介绍

镶嵌列表推导式是指在列表推导式中嵌套另一个或多个列表推导式。这种技巧允许生成嵌套列表,使得代码更加简洁和紧凑。运行顺序是从左向右依次执行。

基本结构

镶嵌列表推导式的基本结构是将一个或多个列表推导式放在另一个列表推导式的内部,创建嵌套列表。

# 基本结构
new_list = [expression for item in iterable if condition for sub_item in sub_iterable if sub_condition]

这里的 sub_iterablesub_condition 是内部循环的迭代对象和条件。

示例

生成二维数组
# 使用嵌套列表推导式生成二维数组
matrix = [[i for i in range(3)] for j in range(4)]# 输出生成的二维数组
for row in matrix:print(row)
多重筛选和操作
# 使用嵌套列表推导式进行多重筛选和操作
nested_list = [i * 2 for i in range(10) if i % 2 == 0 for j in range(3) if j < 2]# 输出生成的列表
print(nested_list)

运行顺序

镶嵌列表推导式的执行顺序是按照书写顺序从左到右执行,首先处理外部循环,然后是内部循环。举例来说,如果有两个列表推导式相互嵌套,那么外层的列表推导式会先执行,内层的列表推导式后执行。

在嵌套的情况下,外层的循环会被认为是内层循环的外部循环,因此内层循环的执行频率会受外层循环控制。

总的来说,镶嵌列表推导式提供了一种生成嵌套列表的快速方式,通过按照书写顺序执行外层和内层循环来生成更加复杂的数据结构。

在列表推导式中遍历多个列表

在列表推导式中同时遍历多个列表,可以使用多个 for 循环实现。这允许您从多个列表中获取元素并执行操作以生成新列表。

基本结构

在列表推导式中同时遍历多个列表的基本结构如下:

new_list = [expression for item1 in list1 for item2 in list2]

其中,list1list2 是待遍历的列表,item1item2 分别代表这些列表中的元素。

示例

两个列表相乘
list1 = [1, 2, 3]
list2 = [4, 5, 6]# 使用列表推导式同时遍历两个列表并执行操作
result = [x * y for x in list1 for y in list2]
print(result)  # 输出:[4, 5, 6, 8, 10, 12, 12, 15, 18]
使用条件过滤
list1 = [1, 2, 3]
list2 = [4, 5, 6]# 使用列表推导式同时遍历两个列表并应用条件
result = [(x, y) for x in list1 for y in list2 if x != y]
print(result)  # 输出:[(1, 4), (1, 5), (1, 6), (2, 4), (2, 6), (3, 4), (3, 5), (3, 6)]

上面的代码等效于

list1 = [1, 2, 3]
list2 = [4, 5, 6]
result = []
for x in list1:for y in list2:if x!=y:result.append((x,y))
print(result)

但是要是代码改成下面的样子时就要注意了:


result = [(x,y) for i in list1 if i ==1 for j in list2 if i!=j]

那么上面的代码就等效于:

result = []
for i in list1:if i ==1:for j in list2:if i !=j:result.append((x,y))

也就是说,我们要特别关注条件判断语句的位置

对应元素相加
list1 = [1, 2, 3]
list2 = [4, 5, 6]# 使用列表推导式同时遍历两个列表并对应元素相加
result = [x + y for x, y in zip(list1, list2)]
print(result)  # 输出:[5, 7, 9]

在这些示例中,使用了不同的操作来同时遍历多个列表。这种方法允许您从多个列表中提取元素并按照条件进行组合或操作,生成新的列表。

相关文章:

python 之 列表推导式

文章目录 基本结构示例 1&#xff1a;将列表中的元素乘以 2 添加条件判断示例 2&#xff1a;筛选出偶数并加倍 嵌套列表推导式示例 3&#xff1a;生成九九乘法表 使用条件表达式示例 4&#xff1a;根据条件返回不同的值 镶嵌使用详细介绍基本结构示例生成二维数组多重筛选和操作…...

【左程云算法全讲2】链表、栈、队列、递归、哈希表和有序表

系列综述&#xff1a; &#x1f49e;目的&#xff1a;本系列是个人整理为了秋招面试的&#xff0c;整理期间苛求每个知识点&#xff0c;平衡理解简易度与深入程度。 &#x1f970;来源&#xff1a;材料主要源于左程云算法课程进行的&#xff0c;每个知识点的修正和深入主要参考…...

SQL第三次上机作业

1.查询与王利就读同一专业学生的借书证号和姓名 SELECT Lno,Rname FROM Reader WHERE Dept(SELECT DeptFROM ReaderWHERE Rname王利)2.查询比希望出版社出版的所有图书价格都高的图书信息 SELECT * FROM Book WHERE Price>(SELECT MAX(Price)FROM BookWHERE Press希望出版…...

前端事件案例补充

目录 定时器示例 搜索框示例 省市联动 定时器示例 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><meta name"viewport" content"widthdevice-width, init…...

3.8 Android eBPF HelloWorld调试(二)

写在前面 我们开发eBPF程序的初衷就是再不改动内核的情况下,将内核监控数据传递给到用户态;像应用进程开发一样开发内核监控程序。 Android开机的时候eBPF程序被加载器加载到内核中,但此时它并没有被附加到内核函数上去,也就是ebpf程序并不会执行,我们可以理解为,它仅仅被…...

xss如何快速提取cookies

<script>alert(111)</script> <img srcx onerroralert(document.cookie)>测试一下baidu的xss <script>alert(111)</script><img srcx οnerrοralert(document.cookie)>...

在 ASP.NET C# 中用Aspose.PDF将 PDF 页面转换为 JPG 图像

PDF 是一种通用格式&#xff0c;通常用于打印和共享文档。 &#xff08;一&#xff09;C# PDF to JPG Converter API - 免费下载 Aspose.PDF for .NET是一个强大的 PDF 操作 API&#xff0c;可让您在 .NET 应用程序中创建和处理 PDF 文件。此外&#xff0c;它还允许您将 PDF 文…...

Docker Compose安装milvus向量数据库单机版-milvus基本操作

目录 安装Ubuntu 22.04 LTS在power shell启动milvus容器安装docker desktop下载yaml文件启动milvus容器Milvus管理软件Attu python连接milvus配置下载wget示例导入必要的模块和类与Milvus数据库建立连接创建名为"hello_milvus"的Milvus数据表插入数据创建索引基于向量…...

极致性能优化:前端SSR渲染利器Qwik.js | 京东云技术团队

引言 前端性能已成为网站和应用成功的关键要素之一。用户期望快速加载的页面和流畅的交互&#xff0c;而前端框架的选择对于实现这些目标至关重要。然而&#xff0c;传统的前端框架在某些情况下可能面临性能挑战且存在技术壁垒。 在这个充满挑战的背景下&#xff0c;我们引入…...

ES6~ES13新特性(二)

文章目录 一、ES71.Array Includes2.指数exponentiation运算符 二、ES81.Object values2.Object entries3.String Padding4.Trailing Commas5.Object Descriptors 三、ES9四、ES101.flat flatMap2.Object fromEntries3.trimStart、trimEnd4.其他知识点 五、ES111.BigInt2.Nulli…...

soildwork2022怎么样添加螺纹孔?

1.退出草图模式&#xff0c;点击需要添加螺纹孔的物体面&#xff0c;选中“特征”中的“异形孔向导” 2.选中“孔类型”为“直螺纹孔”&#xff0c;“标准”&#xff0c;“类型”&#xff0c;“孔规格”终止条件等。 3.设置完之后选择“位置” 4.鼠标左键在物体面上点一下&…...

【t5 pytorch版源码学习】t5-pegasus-pytorch源码学习

0. 项目来源 中文生成式预训练模型&#xff0c;以mT5为基础架构和初始权重&#xff0c;通过类似PEGASUS的方式进行预训练。 bert4keras版&#xff1a;t5-pegasus pytorch版&#xff1a;t5-pegasus-pytorch 本次主要学习pytorch版的代码解读。 项目结构&#xff1a; train…...

【springboot】spring的Aop结合Redis实现对短信接口的限流

前言 场景: 为了限制短信验证码接口的访问次数&#xff0c;防止被刷&#xff0c;结合Aop和redis根据用户ip对用户限流 1.准备工作 首先我们创建一个 Spring Boot 工程&#xff0c;引入 Web 和 Redis 依赖&#xff0c;同时考虑到接口限流一般是通过注解来标记&#xff0c;而注解…...

【MedusaSTears】怎么禁用edge浏览器截图功能?

版本 Microsoft Edge 版本 119.0.2151.44 (正式版本) (64 位) Ctrl Shift S 竟然是浏览器的截屏? 特么的啥时候多了这么个快捷键? 然后还没办法禁用,真TMD傻哔 edge://settings/accessibility解决方式: 参考资料: 怎么禁用edge浏览器截图功能&#xff1f; 您好&#x…...

【计算机网络】(谢希仁第八版)第三章课后习题答案

第三章 1.数据链路(即逻辑链路)与链路(即物理链路)有何区别? “电路接通了”与”数据链路接通了”的区别何在? 答&#xff1a;数据链路与链路的区别在于数据链路出链路外&#xff0c;还必须有一些必要的规程来控制数据的传输&#xff0c;因此&#xff0c;数据链路比链路多了…...

批量异步任务处理

当我们在项目中遇到很多业务同时处理&#xff0c;如果是串行肯定是影响性能的&#xff0c;这时候就需要异步执行了&#xff0c;说道异步肯定就有很多方案了 方案一&#xff1a; 比如使用spring的异步注解&#xff0c;比如下面的代码,每个方法上面都是异步注解&#xff0c;当时…...

宜昌市公安局、点军区政府与中科升哲达成战略合作,共建视频图像联合创新实验室

11月3日&#xff0c;宜昌视频图像联合创新战略合作签约仪式在宜昌市公安局举行。 宜昌市副市长、市公安局党委书记、局长上官福令&#xff0c;市公安局党委副书记、副局长龚海波&#xff0c;宜昌市点军区委书记万红&#xff0c;点军区委副书记、区长黄文云&#xff0c;升哲科技…...

java版小程序商城免费搭建-直播商城平台规划及常见的营销模式有哪些?电商源码/小程序/三级分销

1. 涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买家平台&#xff08;H5/公众号、小程序、APP端&#xff08;IOS/Android&#xff09;、微服务平台&#xff08;业务服务&#xff09; 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis 3. 前端框架…...

Linux下yum源配置实战

一、Linux下软件包的管理 1、软件安装方式 ① RPM包管理&#xff08;需要单独解决依赖问题&#xff09; ② YUM包管理&#xff08;需要有网络及YUM仓库的支持&#xff0c;会自动从互联网下载软件&#xff0c;自动解决依赖&#xff09; ③ 源码安装&#xff08;安装过程比较…...

JSONP 跨域访问(2), JSONP劫持

JSONP 跨域访问(2), JSONP劫持 一, 利用 XSS 漏洞执行jsonp 1. 利用过程 发现有jsonp的请求: <script type"text/javascript" src"http://192.168.112.200/security/jsonp.php?callbackjsonpCallback"></script>向xss漏洞的位置注入代码…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案&#xff0c;如果正确地操作&#xff0c;重启Eureka集群中的节点&#xff0c;对已经注册的服务影响非常小&#xff0c;甚至可以做到无感知。 但如果操作不当&#xff0c;可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

【生成模型】视频生成论文调研

工作清单 上游应用方向&#xff1a;控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录&#xff0c;不允许匿名访问&#xff0c;kefu只能访问/data/kefu目录&#xff0c;不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

20个超级好用的 CSS 动画库

分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码&#xff0c;而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库&#xff0c;可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画&#xff0c;可以包含在你的网页或应用项目中。 3.An…...