推导式是一种简洁、高效的语法,用于从一个可迭代对象中生成新的可迭代(iterable)对象。
通常情况下,在以下情况可以考虑使用推导式:

  1. 只需要简单的表达式来计算新的可迭代对象的元素。
  2. 可迭代对象不是很大,可以在内存中容纳整个可迭代对象和新生成的可迭代对象。
  • 例如,在以下情况下可以使用推导式:
    从一个列表中生成一个新的列表,例如[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基础】推导式(列表、字典、集合)的更多相关文章

  1. python的推导式 —— 列表推导式、集合和字典推导式

    python的推导式是用于快速处理数据的方法. 主要有:列表推导式.集合推导式和字典推导式 import time import numpy as np 列表推导式: 1. 速度快 t1 = time ...

  2. Python 基础-python-列表-元组-字典-集合

    列表格式:name = []name = [name1, name2, name3, name4, name5] #针对列表的操作 name.index("name1")#查询指定 ...

  3. 『Python基础-12』各种推导式(列表推导式、字典推导式、集合推导式)

    # 『Python基础-12』各种推导式(列表推导式.字典推导式.集合推导式) 推导式comprehensions(又称解析式),是Python的一种独有特性.推导式是可以从一个数据序列构建另一个新的 ...

  4. Python基础8:列表推导式(list)字典推导式(dict) 集合推导式(set)

    推导式分为列表推导式(list),字典推导式(dict),集合推导式(set)三种 1.列表推导式也叫列表解析式.功能:是提供一种方便的列表创建方法,所以,列表解析式返回的是一个列表格式:用中括号括起 ...

  5. python列表推导式详解 列表推导式详解 字典推导式 详解 集合推导式详解 嵌套列表推导式详解

    推导式是Python中很强大的.很受欢迎的特性,具有语言简洁,简化代码,速度快等优点.推导式包括:1.列表推导式2.字典推导式3.集合推导式4.嵌套列表推导式注意: 字典和集合推导是最近才加入到Pyt ...

  6. Python迭代器生成器,私有变量及列表字典集合推导式(二)

    1 python自省机制 这个是python一大特性,自省就是面向对象的语言所写的程序在运行时,能知道对象的类型,换句话说就是在运行时能获取对象的类型,比如通过 type(),dir(),getatt ...

  7. Python的列表推导式,字典推导式,集合推导式使用方法

    推导式分为列表推导式(list),字典推导式(dict),集合推导式(set)三种 1.列表推导式也叫列表解析式.功能:是提供一种方便的列表创建方法,所以,列表解析式返回的是一个列表格式:用中括号括起 ...

  8. day15(PYTHON)推导式{生成器,字典,列表,集合}

    #[每一个元素或者是和元素相关的操作 for 元素 in 可迭代数据类型] #遍历之后挨个处理 #[满足条件的元素相关的操作 for 元素 in 可迭代数据类型 if 元素相关的条件] #筛选功能 # ...

  9. python3 列表/字典/集合推导式

    '''列表推导式[结果 fox循环 if语句]'''lst = ["Python周末%s期" % i for i in range(1, 27) if i%2 == 0]print ...

  10. python基础一 -------如何在列表字典集合中根据条件筛选数据

    如何在列表字典集合中根据条件筛选数据 一:列表 先随机生成一个列表,过滤掉负数 1,普通for循环迭代判断 2,filter()函数判断,filter(函数,list|tuple|string) fi ...

随机推荐

  1. 《Unix/Linux系统编程》第十一周学习笔记

    <Unix/Linux系统编程>第十一周学习笔记 TCP/IP协议 TCP/IP 是互联网的基础.TCP代表传输控制协议.IP代表互联网协议.目前有两个版本的IP,即IPv4和IPv6.I ...

  2. idea开发使用外置tomcat配置

    1. 添加依赖 <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId> ...

  3. 单例和mono单例

    单例 public class Singleton<T> where T : new() { private static T instance; public static T Inst ...

  4. winform导出excel报'object' does not contain a definition for 'get_Range'的问题

    现手上有个老项目采用.net framework3.0开发,改成4.0后,excel导出报'object' does not contain a definition for 'get_Range'的 ...

  5. DataTable 导出到TXT

    public static string cExportTXT(DataView dv) { try { SaveFileDialog saveFileDialog1 = new SaveFileDi ...

  6. 安装了lrzsz ,使用时,还是提示找不到

    安装了lrzsz ,使用时,还是提示找不到

  7. SAP transformation特殊字符

    unicode 0000 在transformation中总被翻译成,这个转义在其他语法中不存在,所以总是报错.

  8. (1)入门MasaFramework教程

    (1)入门MasaFramework教程 首先了解一下MasaFramework是什么 MasaFramework是一个基于.Net6.0的后端框架, 可以被用于开发Web应用程序.WPF项目.控制台 ...

  9. Gym 101490K Safe Racing (dp转换, 超超超级详细,包你看懂)

    题意:给你一个长为L的圆形跑道,让你放置警示牌,相邻两个警示牌相隔距离不能超过S,让你求有多少种方案数放置.数据L,S都是1e6. 来个例子:L = 13, S = 5.一个圈表示长度为1. 思路:因 ...

  10. CSS 基础属性篇组成及作用

    #### 学习目标- css属性和属性值的定义- css文本属性- css列表属性- css背景属性- css边框属性- css浮动属性##### 一.css属性和属性值的定义>属性:属性是指定 ...