Python列表推导式

2023-11-10

列表推导式
  • 列表推导式使用非常简洁的方式来快速生成满足特定需求的列表,代码具有非常强的可读性。

  • 语法形式为:

    [expression for expr1 in sequence1 if condition1

    for expr2 in sequence2 if condition2

    ​ for expr3 in sequence3 if condition3

    ​ ...

    ​ for exprN in sequenceN if conditionN]

  • 列表推导式在逻辑上等价于一个循环语句,只是形式上更加简洁。

    例如:

    aList = [x*x for x in range(10)]

    相当于

    >>> aList = []

    >>> for x in range(10):

    ​ aList.append(x*x)

  • 实现嵌套列表的平铺

    >>> vec = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

    [num for elem in vec for num in elem]

    [1, 2, 3, 4, 5, 6, 7, 8, 9]

    在这个列表推导式中有2个循环,其中第一个循环可以看作是外循环,执行的慢;而第二个循环可以看作是内循环,执行的快。上面代码的执行过程等价于下面的写法:

    >>> vec = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

    >>> result = []

    >>> for elem in vec:

    ​ for num in elem:

    ​ result.append(num)

    >>> result

    [1, 2, 3, 4, 5, 6, 7, 8, 9]

  • 过滤不符合条件的元素

    在列表推导式中可以使用if子句对列表中的元素进行筛选,只在结果列表中保留符合条件的元素。下面的代码可以列出当前文件夹下所有Python源文件:

    >>> import os

    >>> [filename for filename in os.listdir('.') if filename.endswith(('.py', '.pyw'))]

    下面的代码用于从列表中选择符合条件的元素组成新的列表:

    >>> aList = [-1, -4, 6, 7.5, -2.3, 9, -11]

    >>> [i for i in aList if i>0] #所有大于0的数字

    [6, 7.5, 9]

  • 同时遍历多个列表或可迭代对象

    [(x, y) for x in [1, 2, 3] for y in [3, 1, 4] if x != y]

    [(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]

    >>> [(x, y) for x in [1, 2, 3] if x==1 for y in [3, 1, 4] if y!=x]

    [(1, 3), (1, 4)]

    对于包含多个循环的列表推导式,一定要清楚多个循环的执行顺序或“嵌套关系”。例如,上面第一个列表推导式等价于

    >>> result = []

    >>> for x in [1, 2, 3]:

    ​ for y in [3, 1, 4]:

    ​ if x != y:

    ​ result.append((x,y))

    >>> result

    [(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]

  • 列表推导式中可以使用函数或复杂表达式

    def f(v):

    ​ if v%2 == 0:

    ​ v = v**2

    ​ else:

    ​ v = v+1

    ​ return v

    >>> [f(v) for v in [2, 3, 4, -1] if v>0]

    [4, 4, 16]

    >>> [v**2 if v%2 == 0 else v+1 for v in [2, 3, 4, -1] if v>0]

    [4, 4, 16]

    >>> x = list(range(10))

    >>> [item>5 for item in x]

    [False, False, False, False, False, False, True, True, True, True]

转载于:https://www.cnblogs.com/godfriend/p/10794668.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python列表推导式 的相关文章

随机推荐

  • 显示器已入手,我快成显示器采购专家了

    上次发了一个请粉丝推荐显示器的文章 想入手显示器 恳请粉丝带我推荐 必有重谢 文章发出后 得到了很多粉丝的回复 一 粉丝留言 粉丝的热情让我再次懵逼 那么多推荐 我到底该选择哪一款 我是个处女座啊 性格逼着我必须做出最佳选择 没办法 我硬着
  • 【Redis】Redis 的学习教程(八)之 BitMap、Geo、HyperLogLog

    Redis 除了五种常见数据类型 String List Hash Set ZSet 还有一些不常用的数据类型 如 BitMap Geo HyperLogLog 等等 它们在各自的领域为大数据量的统计 1 BitMap BitMap 计算
  • C语言:判断一个数是否是偶数

    include
  • mysql人力资源管理系统代码_jsp+mysql人力资源 人力资源管理系统 - 下载 - 搜珍网...

    压缩包 renli1 rar 列表 太原理工 王泽汇 毕设最终版 db rlcp sql 太原理工 王泽汇 毕设最终版 rlcp classpath 太原理工 王泽汇 毕设最终版 rlcp externalToolBuilders com
  • 有些论文附的arXiv:XXXX是什么意思

    什么是arXiv org 先看看来自wikipedia的定义 The arXiv pronounced archive as if the X were the Greek letter Chi is an archive for elec
  • linux下对java程序生成dump文件

    1 首先 java程序启动在linux 怎么生成dump文件 1 第一步 首先你需要得到java程序的PID 最简单的方法使用如下命令 ps ef grep java 或者如果是docker启动的 springboot服务 也可以使用本命令
  • Android 基础知识4-3.11 Adapter(适配器)详解

    一 简介 Adapter是连接后端数据和前端显示的适配器接口 是数据和UI View 之间一个重要的纽带 在常见的View ListView GridView 等地方都需要用到Adapter 如下图直观的表达了Data Adapter Vi
  • 在区块链上开发可更新的智能合约

    由于区块链不可篡改的特性 智能合约一旦部署在区块链上 其执行的逻辑就无法再更改 长期来看 这个重要的特性反而限制了智能合约的弹性和发展 接下来要介绍如何设计及部署合约才能让合约在需要时可以更新 但这里的更新意思不是修改已经部署的合约 而是部
  • 【一网打尽】独立重复事件——常见概率分布

    文章目录 定义 伯努利 Bernouli 试验 n重伯努利试验 伯努利过程 泊松 Poisson 过程 概率分布的意义 0 1分布 伯努利分布 二项 Binomial 分布 负二项 NegativeBinomial 分布 几何 Geomet
  • 区块链的数据结构(一)——区块、链

    区块 区块 block 由区块头 block header 和交易列表 transaction list tx list 组成 block之间通过block header的hash连接成了一个链表结构 但这个链表不同于普通链表 1 bloc
  • JAVA根据PDF文件生成图片

    PDF文件生成图片 实现功能 根据上传的PDF文件 生成图片文件 单页PDF 生成图片文件 多页PDF 则生成zip压缩包 一 文件生成效果 二 引入所需maven依赖 项目采用springboot框架
  • python学习1.2字符串

    一 给变量赋值字符串的时候 要用引号引起来 可以用单引号或者双引号 1 输入 message hello world print message 输出 hello world 2 输入 message hello world print m
  • Java操作ElasticSearch相关内容

    Java连接ES 创建Maven工程 导入依赖
  • 常用遥感SIF和GPP数据集

    一 综述文章 总结一下数据和文章 害怕时间久了忘了 前两篇介绍了SIF 最后一篇介绍了光合作用 1 Remote sensing of solar induced chlorophyll fluorescence SIF in vegeta
  • 【车辆检测】基于背景差分法实现道路行驶车辆检测附matlab代码

    1 简介 该方法的基本思想是 将采集到的车辆图像的每一帧都与一个不含运动车辆的静止参考帧做差值运算 从而突出目标图像 通过分析与处理对车辆计数 其优点是算法简单 处理速度快 且差分结果能直接反应运动目标的位置 形状以及大小等 实用性较强 其
  • css flex布局 —— 容器属性 align-content

    align content 属性定义了多根轴线的对齐方式 如果项目只有一根轴线 该属性不起作用 如果只有一根轴线 align content 几乎等同于 align items 容器属性 align content 生效的条件是 必须显式的
  • 高校校园网使用的认证客户端常见故障自查- 神州数码客户端

    神州数码客户端常见故障自查 一 客户端认证成功前故障 1 接上网线后网卡灯不亮 确定自己电脑网卡带灯 注 测试期间最好是不要接交换机 直接接墙上端口 参考方案 A 更换网线 B 如确认是端口故障 则请致电网络中心报修等待人过来维修 2 如果
  • (每日一练)MATLAB生成斐波那契数和数列

    今天 我学习的内容是利用MATLAB生成斐波那契数 先来介绍一下 斐波那契数列最初是用来解决兔子问题的 问题如下 一个人把一对兔子放在一个四面被墙包围的地方 假设每对兔子每个月都生一对新兔子 不 考虑伦理问题 那么一年可以从这对兔子中生产多
  • C/C++中__builtin_popcount()的使用及原理

    这个函数功能 返回输入数据中 二进制中 1 的个数 对于不同的使用类型 可以采用采用以下函数 builtin popcount int builtin popcountl long int builtin popcountll long l
  • Python列表推导式

    列表推导式 列表推导式使用非常简洁的方式来快速生成满足特定需求的列表 代码具有非常强的可读性 语法形式为 expression for expr1 in sequence1 if condition1 for expr2 in sequen