Python 列表推导式

【Python进阶】之列表推导式 列表推导式是一种简洁而强大的语法结构,用于创建和操作列表。它允许你使用一行代码生成一个新的列表,该列表基于现有列表(或其他可迭代对象)的元素,并可以通过应用条件和转换操作来筛选或修改这些元素。它是Python语言特有的一种语法结构,也可以看成独特的数据处理方式。 阅读详情

前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。

PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取

python免费学习资料、代码以及交流解答点击即可加入


列表推导式

列表推导式(list comprehension),又称列表解析式,其提供了一种简单的方法来创建列表。

其结果返回的对象一般来说是列表,但该语法也同样适用于字典(dict),集合(set)等一系列可迭代的数据结构。

列表推导式的执行顺序:各语句之间是嵌套关系,左边第二个语句是最外层,依次往右进一层,左边第一条语句是最后一层。

 '''
**列表推导式的一种形式**
 '''
[ expr for value in collection [if condition] ]
# 其中 expr: 表达式
# value:代表表达式中的变量吧
# collection:范围
# condition:value所需要的满足的条件

范例

在阅读以下内容时,请最好具备Python中关于列表这个基本数据结构的相关知识,下来让我们来看几个例子,来学习一下列表推导式吧!

1.列表推导式

1.1


x = [-4, -2, 0, 2, 4]
y = [a * 2 for a in x]  # 该条语句旨在给x中的每个元素均乘以2
print(y)
# 结果:[-8, -4, 0, 4, 8]

我们可以进一步讨论一下,若直接对列表进行乘以2操作会发生什么呢?

经过计算机测试,其结果是这样的,并非是对列表的每一个元素进行乘以2操作,而是简单的复制两次,返回一个长度不同于原来的新列表。


x = [-4, -2, 0, 2, 4]
y = x * 2
print(y)
# 结果: [-4, -2, 0, 2, 4, -4, -2, 0, 2, 4]

下来我们在将其该列表x转化成数组再试试,


import numpy as np # 导入科学计算库
x = [-4, -2, 0, 2, 4]
y = np.array(x) # 将列表x转化为数组形式
print(y)
# 结果: [-4 -2  0  2  4]

y = y * 2 # 对转化的数组进行乘以2操作
print(y)
# 结果: [-8 -4  0  4  8]

可以看到这样就和列表推导式的结果相同了,因此不能通过对列表乘以某个数以达到对每个元素都进行操作的目的。

1.2


x = [i ** 2 for i in range(1, 10)]
print(x)
# 结果:[1, 4, 9, 16, 25, 36, 49, 64, 81]

其相当于下面这样一种表达,


x = [] # 创建一个空的列表
for i in range(1, 10)
  y = i ** 2  # 对i进行平方操作,在python中“ ** ”代表次方
  x.append(y) # 采用列表的append方法来实现装填吧
print(x)
# 结果:[1, 4, 9, 16, 25, 36, 49, 64, 81]

通过上面的方法,我们就可以直观地看出该列表推导式的含义。

1.3


x = [(i, i ** 2) for i in range(6)]
print(x)
# 结果:[(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25)]

1.4


x = [i for i in range(100) if (i % 2) != 0 and (i % 3) == 0]
print(x)
# 结果: [3, 9, 15, 21, 27, 33, 39, 45, 51, 57, 63, 69, 75, 81, 87, 93, 99]

上式要表达的意思是从[0, 100)中选出满足:不是2的倍数,是3的倍数的整数,即选择是3的倍数的奇数。

1.5


a = [(i, j) for i in range(0, 3) for j in range(0, 3)]
print(a)
# 结果:[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]

由于存在嵌套关系,所以上式等价于以下所述语句,


a = []
for i in range(0, 3):
  for j in range(0, 3):
    a.append((i, j))
print(a)
# 结果:[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]

对于二维列表也有同样操作,


x = [[i, j] for i in range(0, 3) for j in range(0, 3)]
print(x)
# 结果:[[0, 0], [0, 1], [0, 2], [1, 0], [1, 1], [1, 2], [2, 0], [2, 1], [2, 2]]

x[0][0] = 10
print(x)
# 结果:[[10, 0], [0, 1], [0, 2], [1, 0], [1, 1], [1, 2], [2, 0], [2, 1], [2, 2]]

1.6


a = [(i, j) for i in range(0, 3) if i < 1 for j in range(0, 3) if j > 1]
print(a)
# 结果:[(0, 2)]

和例1.5相同,属于嵌套关系;

2.元组推导式


( expr for value in collection [if condition] )

2.1


a = (x for x in range(10))
print(a)
# <generator object <genexpr> at 0x0000025BE511CC48>
# 此时生成了一个迭代器( python generator object)对象,类似C++中的指针,无法打印出内容
# 通过tuple()转化为一个元组对象即可
print(tuple(a))
# 结果:(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)

3. 字典推导式


{ key_expr: value_expr for value in collection [if condition] }

3.1


b = {i: i % 2 == 0 for i in range(10) if i % 3 == 0}
print(b)
# 结果: {0: True, 3: False, 6: True, 9: False}

4.集合推导式

{ expr for value in collection [if condition] }

4.1


c = {i for i in [1, 2, 3, 4, 5, 5, 6, 4, 3, 2, 1]}
print(c)
# 结果: {1, 2, 3, 4, 5, 6}

5.其他推导式


next(iterator[, default]) 
# 从迭代器(iterator)返回下一项。
# 主要通过调用__next__()方法来实现的。
# 如果default参数有设置,当下一个元素不存在时,就返回default参数的值,否则抛出异常StopIteration。

5.1


e = (i for i in range(10))  # 此时e为一迭代器对象,类似C++中的指针
print(e)  
# <generator object <genexpr> at 0x0000007A0B8D01B0>

print(next(e))  # 0
print(next(e))  # 1
print(next(e, 520))  # 2 由于下一元素存在,继续输出原值2

for each in e:
    print(each, end=' ') 
# 结果: 3 4 5 6 7 8 9

# 此时迭代器下一个元素不存在若继续输出,则
print(next(e))
# 结果: 
---------------------------------------------------------------
StopIteration Traceback (most recent call last)  <ipython-input-37-0dc99b6a1209> in <module>
# 计算机会抛出以上错误,若我们给予器默认参数值,则
print(next(e, 520))
# 结果: 520 

5.2


s = sum([i for i in range(101)])
print(s)  
# 5050

s = sum((i for i in range(101)))
print(s)  
# 5050
10分钟极速SpringBoot项目搭建:OpenClaw AI实战攻略 OpenClaw,作为一款革命性的 AI 工具,凭借其强大的智能体能力,能够在短短 10 分钟内,帮助开发者从零构建一个完整的 SpringBoot 项目,实现真正的极速开发。它不仅极大地提高了开发效率,还降低了开发门槛,让更多的开发者能够专注于业务逻辑的实现,而无需被繁琐的配置工作所困扰 阅读详情

相关推荐

UE4项目迁移指南:如何无缝导入外部.uasset文件并保持材质关联

本文详细解析了将外部.uasset文件无缝导入UE4项目的专业方法。针对手动复制文件时常见的材质关联丢失问题,提供了使用引用查看器进行诊断和修复的实用技巧,并推荐使用引擎内置的“迁移”功能确保资源依赖关系的完整性,帮助开发者高效整合项目资源。

t8u9v0的博客 1046

【笔记】Python 列表推导式(表达式 for 变量 in 列表 if 表达式 ) 执行顺序

列表推导式用于使用其他列表创建一个新列表。 一般形式:中括号内含一个表达式,然后是一个for语句,然后是 0 个或多个 for 或者 if 语句。 [表达式for变量in列表if表达式] 执行顺序: 各语句之间是嵌套关系; 左边第二个语句是最外层,往右为第二层,依此类推; 而左边第一条语句是最后一层。 例: [x*y for x in range(1...

在下能猫 的博客 8984

2021-08-20

通过QQ号获取绑定的手机号 导语 偶有奇想,我们可以通过手机号来搜索获取其对应的QQ号,那么,反过来呢? 一.缩小范围 由于手机号属于隐私数据,腾讯QQ并没有直接给出通过QQ号查找对应手机号的接口。 国内的手机号有十一位数字,从数学的角度上来说,包含了1011种可能。如果遍历这1011个数据,通过QQ中手机号查找QQ号的接口来寻找,未免太过费时费力,根据网上查到的资料,同一个QQ号,在十分钟内只能进行30次查询(未验证)。因此,直接遍历的方法不现实。 在这10^13个数据中,包含着大量的可去除的无用数据。我

m0_56063822的博客 4720

python——列表推导式

那个表达式可以是任意的,意思是你可以在列表中放入任意类型的对象。当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

weixin_68789096的博客 1713

开源libmodbus编译为32位和64位动态库

libmodbus 是支持Linux,Mac OS X,window 的一个开源库,支持modbus TCP和RTU 两种模式。

lemontree1945的博客 1923

Python 上位机开发

首先,什么是上位机?上位机通常是指可以与下位机(如单片机、传感器等硬件设备)进行通信和交互,实现数据采集、控制指令发送以及数据处理和展示的计算机程序。 Python 作为一种高级编程语言,在开发上位机方面具有诸多优势。它拥有丰富的第三方库,使得开发过程变得相对简单和高效。

weixin_46807151的博客 4303

python列表推导式中使用if语句及他们的等价形式

python列表推导式中使用if语句及他们的等价形式 在python的列表推导式中使用if语句有两种形式: # 方式1: 起过滤作用 [expr(x) for x in li if cond(x)] # 方式1 等价于filter函数 list(map(expr, filter(cond, li))) # 方式2: 作为三元表达式使用,满足条件将其作expr1处...

u010592244的专栏 6176

HDR标准核心参数全解析:从PQ/HLG到元数据,一篇搞懂技术选型

本文全面解析HDR标准的核心参数,包括PQ/HLG传输函数和元数据机制,帮助读者理解技术选型的关键因素。通过对比主流HDR标准的技术细节,提供从内容创作到硬件适配的实用指南,助力实现更真实的视觉体验。

weixin_31766003的博客 300

精讲列表推导式

精讲列表推导式 Python里面有个很棒的语法糖(syntactic sugar),它就是 list comprehension ,有人把它翻译成“列表推导式”,也有人翻译成“列表解析式”。名字听上去很难理解,但是看它的语法就很清晰了。虽然名字叫做 list comprehension,但是这个语法同样适用于dict、set等这一系列可迭代(iterable)数据结构 列表推导式的执行顺序:各语句之间是嵌套关系,左边第二个语句是最外层,依次往右进一层,左边第一条语句是最后一层 list1 = [i**2 f

wtj的博客 733

AI辅助Android开发:从传统到智能化的技术演进

AI辅助开发的核心在于利用算法模型自动化或优化传统任务。在Android开发中,AI可应用于需求分析、设计、编码、测试和维护各阶段。需求分析:AI工具如基于NLP的模型(例如GPT系列)可解析用户需求文档,自动生成用户故事和原型设计。假设产品需求为“开发一个航班查询应用”,AI能提取关键词,输出UML图或伪代码。代码生成:使用AI代码助手(如GitHub Copilot),工程师输入自然语言描述,AI生成Java/Kotlin代码片段。

郑伟强dev的专栏 137

【工业相机】【深度4】线扫描相机 - 选型实践

前言: 在工业相机的深度应用的前三节里面,针对工业相机的选型、参数、应用计算等做了一些说明。期中,在深度3里面,在说明工业相机在速度场景下的应用的时候,专门开了一节介绍线扫描相机行频速度的计算公式和镜头的选型的大致说明,感觉说的还是不够透彻,切应用举例也不充分,这里特别开一个章节,基于线扫描相机的特点对比面阵相机的特点进行比较详细的说明,尤其对线扫描相机的选型实践,尤其是线扫描相机的分辨率选择计算、行频选择计算进行了充分的说明和计算说明,希望能够给用到线扫描工业相机的同学给予一定的参考: 阐述: 在编

山云的专栏 2万+

Python列表推导式

Python列表推导式 列表推导式是Python构建列表(list)的一种快捷方式,可以使用简洁的代码就创建出一个列表. 一、range()函数 python的range()函数可用来创建一个整数列表,一般用在 for 循环中. range()语法:range(start, stop[, step]) start: 计数从start开始,默认是从0开始(闭区间),如:range(5)等价...

weixin_43790276的博客 11万+

RK3588 DDR5 方案

RK3588 DDR5方案支持多种LPDDR5/LPDDR5X内存型号,包括美光、三星、海力士、江波龙和佰维等品牌。文档详细列出了已验证的DDR5内存规格,涵盖2GB-16GB容量范围,提供组织形式、封装类型和测试状态等信息。其中美光型号最全面,支持12GB/16GB大容量方案。部分型号处于测试验证阶段(T/A),需量产进一步确认性能。该方案为RK3588平台开发提供可靠的内存选型参考。

501846585_QQAndroid_java 1083

python基础——列表推导式

列表推导式(list comprehension)列表推导式形式较为简洁,是利用其它列表创建新列表的一种方式,它的工作方式类似于for循环,也可以嵌套if条件判断语句。for out_exp in input_list:迭代input_list将out_exp传入out_exp_res表达式中。out_exp_res:列表生成元素表达式,可以是有返回值的函数。本实验详细介绍了Python数据结构:列表推导式的用法。掌握Python数据结构:列表推导式的用法。

阿极的博客 6166

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

【python】列表推导式

列表推导式是Python构建列表(list)的一种快捷方式,可以使用简洁的代码就创建出一个列表.

qq_46110320的博客 1532

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【Python教程】掌握Python列表推导式的6种方法

掌握Python列表推导式的6种方法

2301_78095812的博客 2664

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Python进阶语法:列表推导式

推导式comprehensions(又称解析式),是Python的一种独有特性,可以从一个数据序列构建另一个新的数据序列。具有使用方便,让代码看起来很高级的功能。列表推导式是 Python 语言特有的一种语法结构,也可以看成是 Python 中一种独特的数据处理方式。所谓的列表推导式,就是指的轻量级循环创建列表。

moment159的博客 7464

【python】理解列表推导式以及列表推导式嵌套

列表推导式 所谓列表推导式,就是将一个可迭代的列表遍历,将每次遍历的元素拿出来进行一些操作,并用一个【】括起来,组成一个新的列表 语法 [expression for i in item if condition] expression 就是对每一个元素的具体操作表达式; item是某个可迭代对象的元素,如列表,元组或字符串等对象每次迭代的对象; if condition 是对每一个元素做分支判断, 如果条件符合,则expression操作对应的元素.为了更好地说明列表表达式 例子 >>&

这道题我不会做...不会做啊..太难了!! 1442

python列表推导式是什么_python列表推导式是什么?

乍一看到列表推导式你可能会感到疑惑。它们是一种创建和使用列表的简洁方式。理解列表推导式是有用的,因为你可能在其他人的代码里看到列表推导式。下面来了解下列表推导式吧。数字列表的推导式回顾之前学过的知识,我们可以创建一个包含前10个数字的列表,如下所示:squares = []for number in range(1,11):new_square = number**2squares.append(...

weixin_39926042的博客 304

python列表推导式生成随机数_python列表推导式

列表推导式介绍列表推导式是Python中快速创建列表的一种方式。之前我们要创建(Python3中)一个元素是0~9的列表,我们可能会像下面这么写:>>> list(range(10))[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]复制代码这么写没毛病,但是如果要稍微复杂一点的需求可能就有点棘手了,比如:把列表[0, 1, 2, 3, 4, 5, 6, 7, 8, 9...

weixin_39986896的博客 1494

python双重for循环 列表推导式_Python 列表推导式

列表推导式(list comprehension)是利用其它列表创建新列表的一种方式。它的工作方式类似于for循环,例如:>>> [x*x for x in range(10)]>>> [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]上面列表推导式中的“for x in range(10)”相当于一个for循环,range()函数用来创建...

weixin_39759881的博客 4347

详解Python列表推导式

列表推导式可以使用非常简洁的方式对列表或其他可迭代对象的元素进行遍历和过滤,快速生成满足特定需求的列表,代码具有非常强的可读性,是Python程序开发时应用最多的技术之一。Python的内...

董付国的Python专栏 2603

python 列表推导式详解

推导式comprehensions(又称解析式),是Python的一种独有特性,可以从一个数据序列构建另一个新的数据序列。具有使用方便,让代码看起来很高级的功能。 分析 考虑以下需求: a=[1,2,3,'a','b','c'] 要取出列表中的数字,然后平方,得到一个新的列表。 一般可以这样解决: a=[1,2,3,'a','b','c'] b=[] for i in a: # isinstance(a,type) 判断a的类型是不是type if(isinstance(i,int)).

qq_39545674的博客 2132
上一篇: Python基础----函数基础
下一篇: 【Python爬虫】5分钟快速掌握 scrapy 爬虫框架
酸菜鱼编程
博客等级 码龄6年 155粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值