【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 ...
随机推荐
- 从XXE漏洞修复引起Not supported: http://javax.xml.XMLConstants/property/accessExternalDTD说到SPI机制
引子 在使用Fortify扫描时代码报XML External Entity Injection,此漏洞为xml实体注入漏洞,XXE攻击可利用在处理时动态构建文档的 XML 功能.修复方案也包含了增 ...
- Spring 常见问题 - 1
1. 什么是spring? 两大功能,依赖注入和面向切面编程(DI & AOP) 为了降低 Java 开发的复杂性,Spring 采取了以下4种关键策略 基于 POJO 的轻量级和最小侵入性编 ...
- windows监控web程序连接数
运行: win+R->perfmon.msc 右键,添加计数器 选择webservice中的current connection选项,再选中对应实例即可~
- leetcode medium 记录 1-50
# Title Solution 二刷 Difficulty 备注 2 Add Two Numbers X Medium 3 Longest Substring Wi ...
- Java笔记第七弹
案例:复制Java文件(打印流改进版) import java.io.*; public class Main{ public static void main(String[] args) thro ...
- 组合计数中的q-模拟 q analog
拒绝更新,深度和广度上建议看这个pdf URL里面用到的一些query-string过期了,,, 论文题目是 THE q-SERIES IN COMBINATORICS; PERMUTATION ST ...
- 5分钟带你彻底搞懂async底层实现原理!
ES2017 标准引入了 async 函数,使得异步操作变得更加方便. async 函数是什么?一句话,它就是 Generator 函数的语法糖.研究 async 的原理,就必须先弄清楚 Genera ...
- 6.sql注入
sql注入 目录 sql注入 1.SQL注入原理 2.如何判断注入点 联合注入 报错注入(有错误报出) 布尔盲注(不管输入什么,界面只会出现两种结果) 时间盲注(不管输入什么,界面都是一样的) 堆叠注 ...
- 字符串常见API(charCodeAt\fromCharCode)
1.myStr.charCodeAt(num) 返回指定位置的字符的Unicode(是字符编码的一种模式)编码. 2.String.fromCharCode() String的意思就是不能用自己定义的 ...
- jason数组实现页面
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...