【Python基础】推导式(列表、字典、集合)
推导式是一种简洁、高效的语法,用于从一个可迭代对象中生成新的可迭代(iterable)对象。
通常情况下,在以下情况可以考虑使用推导式:
- 只需要简单的表达式来计算新的可迭代对象的元素。
- 可迭代对象不是很大,可以在内存中容纳整个可迭代对象和新生成的可迭代对象。
- 例如,在以下情况下可以使用推导式:
从一个列表中生成一个新的列表,例如[n**2 for n in numbers]。
从一个列表中生成一个新的集合,例如{n for n in numbers}。
从一个列表中生成一个新的字典,例如{n: n**2 for n in numbers}。
Python中有三种类型的推导式:列表推导式、字典推导式和集合推导式。它们的语法如下:
- 列表推导式:
[expression for item in iterable] - 字典推导式:
{key_expression: value_expression for item in iterable} - 集合推导式:
{expression for item in iterable}
其中,expression表示要生成的元素表达式,item表示可迭代对象中的元素,key_expression和value_expression分别表示生成字典的键和值的表达式。
一下是简单的使用示例:
列表推导式
numbers = [1, 2, 3, 4, 5]
squares = [n**2 for n in numbers]
print(squares)
# 输出:[1, 4, 9, 16, 25]
字典推导式
# 获取每个名字的长度
names = ['sunwuk', 'zhubajie', 'shaheshang', 'tangseng']
name_length = {name: len(name) for name in names}
print(name_length)
# 输出:{'sunwuk': 6, 'zhubajie': 8, 'shaheshang': 10, 'tangseng': 8}
#将键和值调换位置
names1 = {"name":"孙悟空","age":18,"address":"花果山"}
names2 = {v:k for k,v in names1.items()}
names3 = [[v,k] for k,v in names1.items()]
names4 = [{v, k} for k,v in names1.items()]
print(names2) # {'孙悟空': 'name', 18: 'age', '花果山': 'address'}
print(names3) # [['孙悟空', 'name'], [18, 'age'], ['花果山', 'address']]
print(names4) # [{'孙悟空', 'name'}, {'age', 18}, {'address', '花果山'}]
在上面例子中,我们暂且将names4外部的[]看做容器类型,而内部的{}就是容器内元素的类型
集合推导式
集合推导式也需要使用花括号包裹
numbers = [1, 2, 3, 4, 5, 5, 4, 3, 2, 1]
unique_numbers = {n for n in numbers}
print(unique_numbers)
# 输出:{1, 2, 3, 4, 5}
生成器表达式
生成器表达式与列表推导式非常相似,只是它使用圆括号而不是方括号。下面是一个简单的例子:
gen = (x**2 for x in range(10))
在上面的代码中,我们创建了一个生成器表达式 gen,它可以生成0到9的平方数。要访问生成器表达式中的元素,可以使用 next() 函数或将其转换为迭代器进行迭代:
print(next(gen)) # 输出 0
print(next(gen)) # 输出 1
for num in gen:
print(num) # 输出剩余的元素 4, 9, 16, 25, 36, 49, 64, 81
生成器表达式只能迭代一次。一旦所有元素都被访问过,它就会停止生成新元素。
注意
需要注意的是,列表推导式需要使用中括号
[ ]来包裹,而字典推导式和集合推导式需要使用花括号{ }来包裹
当需要进行复杂的计算或涉及多个循环或条件时,推导式可能不是最佳选择,因为它可能会降低代码的可读性和可维护性。在这种情况下,应该考虑使用传统的循环和条件语句来生成新的可迭代对象。
另外,推导式不应该过度嵌套使用,因为它会降低代码的可读性和可维护性。如果推导式变得过于复杂或难以理解,那么可能需要使用其他方式来实现相同的功能。
【Python基础】推导式(列表、字典、集合)的更多相关文章
- python的推导式 —— 列表推导式、集合和字典推导式
python的推导式是用于快速处理数据的方法. 主要有:列表推导式.集合推导式和字典推导式 import time import numpy as np 列表推导式: 1. 速度快 t1 = time ...
- Python 基础-python-列表-元组-字典-集合
列表格式:name = []name = [name1, name2, name3, name4, name5] #针对列表的操作 name.index("name1")#查询指定 ...
- 『Python基础-12』各种推导式(列表推导式、字典推导式、集合推导式)
# 『Python基础-12』各种推导式(列表推导式.字典推导式.集合推导式) 推导式comprehensions(又称解析式),是Python的一种独有特性.推导式是可以从一个数据序列构建另一个新的 ...
- Python基础8:列表推导式(list)字典推导式(dict) 集合推导式(set)
推导式分为列表推导式(list),字典推导式(dict),集合推导式(set)三种 1.列表推导式也叫列表解析式.功能:是提供一种方便的列表创建方法,所以,列表解析式返回的是一个列表格式:用中括号括起 ...
- python列表推导式详解 列表推导式详解 字典推导式 详解 集合推导式详解 嵌套列表推导式详解
推导式是Python中很强大的.很受欢迎的特性,具有语言简洁,简化代码,速度快等优点.推导式包括:1.列表推导式2.字典推导式3.集合推导式4.嵌套列表推导式注意: 字典和集合推导是最近才加入到Pyt ...
- Python迭代器生成器,私有变量及列表字典集合推导式(二)
1 python自省机制 这个是python一大特性,自省就是面向对象的语言所写的程序在运行时,能知道对象的类型,换句话说就是在运行时能获取对象的类型,比如通过 type(),dir(),getatt ...
- Python的列表推导式,字典推导式,集合推导式使用方法
推导式分为列表推导式(list),字典推导式(dict),集合推导式(set)三种 1.列表推导式也叫列表解析式.功能:是提供一种方便的列表创建方法,所以,列表解析式返回的是一个列表格式:用中括号括起 ...
- day15(PYTHON)推导式{生成器,字典,列表,集合}
#[每一个元素或者是和元素相关的操作 for 元素 in 可迭代数据类型] #遍历之后挨个处理 #[满足条件的元素相关的操作 for 元素 in 可迭代数据类型 if 元素相关的条件] #筛选功能 # ...
- python3 列表/字典/集合推导式
'''列表推导式[结果 fox循环 if语句]'''lst = ["Python周末%s期" % i for i in range(1, 27) if i%2 == 0]print ...
- python基础一 -------如何在列表字典集合中根据条件筛选数据
如何在列表字典集合中根据条件筛选数据 一:列表 先随机生成一个列表,过滤掉负数 1,普通for循环迭代判断 2,filter()函数判断,filter(函数,list|tuple|string) fi ...
随机推荐
- scrapy框架中的pipelines没有成功调用process_item方法
提示报错 原因: items没有接收到Spider的返回值,导致pipelines没有接收到items模块的返回值,检查Spider模块是否正确返回值,我这里的原因是,数据解析完成后没有yield i ...
- classpath、path、JAVA_HOME的作用及JAVA环境变量配置 (转)
CLASSPATH是什么?它的作用是什么? 它是javac编译器的一个环境变量.它的作用与import.package关键字有关.当你写下improt java.util.*时,编译器面对import ...
- 2021 技术展望丨AV1 在 RTC 应用实践中的现状与展望
线上会议.在线教育.电商直播等多个场景的兴起,也使得实时互动技术从幕后走到台前,得到了更多人的关注.编解码.网络传输.计算机视觉等 RTE 相关的一系列技术也正焕发出更强的生命力.2021 年,在深度 ...
- DevOps|研发效能不是老板工程,是开发者服务
有人说研发效能是老板工程.不是的,研发效能不是老板工程,它不直接服务于老板(虽然老板可能看一些报表),反而是服务于广大产研运(产品+研发+质量+运维)的同学,所以有的公司也把研发效能叫做基础中台,平台 ...
- FastDFS 使用流程
一.什么是FastDFS? FastDFS 是用 C 语言编写的一款开源的分布式文件系统,对文件进行管理,主要功能包括:文件存储.文件同步.文件访问(文件上传.文件下载)等,解决了大容量存储和负载均衡 ...
- MyBatis 版本升级引发的线上问题
MyBatis上线前后的版本:上线前(3.2.3)上线后(3.4.6) 服务上线后,开始陆续出现了一些更新系统交互日志方面的报警,这属于系统的辅助流程,报警如下代码所示.我们发现都是跟 MyBatis ...
- 15.AQS的今生,构建出JUC的基础
大家好,我是王有志,欢迎和我聊技术,聊漂泊在外的生活.快来加入我们的Java提桶跑路群:共同富裕的Java人. <AQS的前世,从1990年的论文说起>中我们已经对AQS做了简单的介绍,并 ...
- Oracle宕机之PMON (ospid: 248987): terminating the instance due to error 484(另附hugepage配置方法)
数据库版本:11.2.0.4 RAC环境 操作系统版本:Asianux Server release 7.3 数据库报错分析 接到业务消息,应用无法访问,开发人员查看日志后发现无法连接数据库. 查看数 ...
- 在Ubuntu中安装Samba文件服务
点击蓝字 关注我们 First Frost 在Ubuntu中安装Samba文件服务 Samba是一个能让Linux系统应用Microsoft网络通讯协议的软件,而SMB是Server Message ...
- CentOS 落幕,将于2021年底结束维护
官方最新消息: 译文: CentOS项目的未来是CentOS Stream,明年,我们将把重点从重建Red Hat Enterprise Linux(RHEL)的CentOS Linux转移到Cent ...