推导式是一种简洁、高效的语法,用于从一个可迭代对象中生成新的可迭代(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. 从XXE漏洞修复引起Not supported: http://javax.xml.XMLConstants/property/accessExternalDTD说到SPI机制

    引子  在使用Fortify扫描时代码报XML External Entity Injection,此漏洞为xml实体注入漏洞,XXE攻击可利用在处理时动态构建文档的 XML 功能.修复方案也包含了增 ...

  2. Spring 常见问题 - 1

    1. 什么是spring? 两大功能,依赖注入和面向切面编程(DI & AOP) 为了降低 Java 开发的复杂性,Spring 采取了以下4种关键策略 基于 POJO 的轻量级和最小侵入性编 ...

  3. windows监控web程序连接数

    运行: win+R->perfmon.msc 右键,添加计数器 选择webservice中的current connection选项,再选中对应实例即可~

  4. leetcode medium 记录 1-50

      # Title Solution 二刷 Difficulty 备注     2 Add Two Numbers      X   Medium     3 Longest Substring Wi ...

  5. Java笔记第七弹

    案例:复制Java文件(打印流改进版) import java.io.*; public class Main{ public static void main(String[] args) thro ...

  6. 组合计数中的q-模拟 q analog

    拒绝更新,深度和广度上建议看这个pdf URL里面用到的一些query-string过期了,,, 论文题目是 THE q-SERIES IN COMBINATORICS; PERMUTATION ST ...

  7. 5分钟带你彻底搞懂async底层实现原理!

    ES2017 标准引入了 async 函数,使得异步操作变得更加方便. async 函数是什么?一句话,它就是 Generator 函数的语法糖.研究 async 的原理,就必须先弄清楚 Genera ...

  8. 6.sql注入

    sql注入 目录 sql注入 1.SQL注入原理 2.如何判断注入点 联合注入 报错注入(有错误报出) 布尔盲注(不管输入什么,界面只会出现两种结果) 时间盲注(不管输入什么,界面都是一样的) 堆叠注 ...

  9. 字符串常见API(charCodeAt\fromCharCode)

    1.myStr.charCodeAt(num) 返回指定位置的字符的Unicode(是字符编码的一种模式)编码. 2.String.fromCharCode() String的意思就是不能用自己定义的 ...

  10. jason数组实现页面

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...