推导式是一种简洁、高效的语法,用于从一个可迭代对象中生成新的可迭代(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. centos7.6 挂载镜像配置本地yum源

    镜像下载 http://mirrors.aliyun.com/centos-vault/7.6.1810/isos/x86_64/ 配置本地yum源 1.安装Centos后默认的Yum源如下 [roo ...

  2. Python Type Hint中Optional[str]=None和str=None的区别

    Python Type Hint中Optional[str]=None和str=None的区别 1 问题来源 在读到Fluent Python, 2ed Edition, P260时产生了一些疑问: ...

  3. 在app中如何使weib-view不铺满全屏,自适应页面

    // #ifdef APP-PLUS //自建webview var currentWebview = this.$scope.$getAppWebview(); var height = this. ...

  4. DVWA-File Inclusion(文件包含)

    文件包含漏洞,当我们在一个代码文件想要引入.嵌套另一个代码文件的时候,就是文件包含. 常见的文件包含函数有include require等函数. 这两个函数的区别就是include在包含文件不存在时p ...

  5. 【LeetCode2180】[Go/C++/C#/Ruby/Swift/Kotlin/Rust/PHP/TS/Racket/Dart/Java/Elixir/Scala/Erlang] 统计各位数字之和为偶数的整数个数

    目录 题解地址 代码 golang c++ C# ruby swift kotlin rust php typescript racket dart java elixir scala erlang ...

  6. Django笔记一之运行系统、创建视图并访问

    从这一篇笔记开始将根据 Django 的官方文档,阅读整理之后,出一系列笔记教程,用作新手入门教程或者自己做查阅. 此次 Django 的版本为 3.2,且之后的一系列笔记都将以这个版本为基础,做功能 ...

  7. hta--Windows运行html的桌面应用程序(HTML应用程序)

    HTA(HTML Application)-- HTML应用程序 作为前端开发,我们能熟练使用html实现各种效果,但是如果要实现一个简单的桌面应用程序那么应该怎么做呢,答案很简单,只需要把html文 ...

  8. Spring(Bean详解)

    GoF之工厂模式 GoF是指二十三种设计模式 GoF23种设计模式可分为三大类: 创建型(5个):解决对象创建问题. 单例模式 工厂方法模式 抽象工厂模式 建造者模式 原型模式 结构型(7个):一些类 ...

  9. Redis系列12:Redis 的事务机制

    Redis系列1:深刻理解高性能Redis的本质 Redis系列2:数据持久化提高可用性 Redis系列3:高可用之主从架构 Redis系列4:高可用之Sentinel(哨兵模式) Redis系列5: ...

  10. window远程桌面

    此文档概述如何开启win8.win8.1系统的远程桌面连接服务,可以让我们从一台电脑远程连接的其他电脑! 同时按"win键+R键",再打开的运行对话框中输入"contro ...