Python——列表(list)推导式

本文基于python3。

目录

  • 1、Python推导式
  • 2、列表(list)推导式
    • 2.1、定义
    • 2.2、实际操作
      • 2.2.1、一个表达式,后面为一个 for 子句
      • 2.2.2、一个表达式,后面为一个 for 子句,然后,跟着if 子句。
      • 2.2.3、一个表达式,后面为一个 for 子句,然后,跟着 for 子句。
      • 2.2.4、一个表达式,后面为一个 for 子句,然后,跟着 for 子句,if 语句
      • 2.2.5、表达式的不同
        • 2.2.5.1、表达式是函数
        • 2.2.5.2、表达式是元组
        • 2.2.5.2、表达式是复杂的表达式和嵌套函数
  • 3、利用列表推导式实现乘法口诀
  • 4、总结

1、Python推导式

你可以理解成一种数据的处理方式。目的是为了构建一个新的数据序列。
Python 支持各种数据结构的推导式:

  1. 列表(list)推导式
  2. 字典(dict)推导式
  3. 集合(set)推导式
  4. 元组(tuple)推导式

各自从字面意思就知道,创建一个列表、字典、集合、元组。
我们本文只看列表(list)推导式。

2、列表(list)推导式

列表推导式创建列表的方式更简洁。
常见的用法:

  1. 对序列或可迭代对象中的每个元素应用某种操作,用生成的结果创建新的列表。
  2. 用满足特定条件的元素创建子序列。

2.1、定义

定义主要有两种:(该部分定义来自:菜鸟教程)

  • 定义1:
[表达式 for 变量 in 列表] 
[out_exp_res for out_exp in input_list]
  • 定义2
[表达式 for 变量 in 列表 if 条件]
[out_exp_res for out_exp in input_list if condition]
  • out_exp_res:列表生成元素表达式,可以是有返回值的函数。
  • for out_exp in input_list:迭代 input_list 将 out_exp 传入到 out_exp_res 表达式中。
  • if condition:条件语句,可以过滤列表中不符合条件的值。

总结:一个表达式,后面为一个 for 子句,然后跟着零个或多个 for 或 if 子句。结果是由表达式依据 for 和 if 子句求值计算而得出一个新列表。

基于总结话我们来实际操作一下。

2.2、实际操作

2.2.1、一个表达式,后面为一个 for 子句

创建 数值*2 的列表:

TestList = [x*2 for x in range(10)]

print(TestList)
# [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

等价于以下语句:

TestList = []
for x in range(10):
    TestList.append(x*2)

print(TestList)

2.2.2、一个表达式,后面为一个 for 子句,然后,跟着if 子句。

创建 全是偶数 的列表:

TestList = [i for i in range(10) if i % 2 == 0]

print(TestList)
# [0, 2, 4, 6, 8]

等价于以下语句:

TestList = []
for i in range(10):
    if i % 2 == 0:
        TestList.append(i)

print(TestList)

2.2.3、一个表达式,后面为一个 for 子句,然后,跟着 for 子句。

直接上实例,一看就懂:

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

TestList = [j for i in OldList for j in i]

print(TestList)
# [1, 2, 3, 4, 5, 6, 7, 8, 9]

等价于以下语句:

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

for i in OldList:
    for j in i:
        TestList.append(j)

print(TestList)
# [1, 2, 3, 4, 5, 6, 7, 8, 9]

2.2.4、一个表达式,后面为一个 for 子句,然后,跟着 for 子句,if 语句

直接上实例:

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

TestList = [j for i in OldList for j in i if j % 2 == 0]

print(TestList)
# [2, 4, 6, 8]

等价于以下语句:

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

for i in OldList:
    for j in i:
        if j % 2 == 0:
            TestList.append(j)

print(TestList)
# [2, 4, 6, 8]

2.2.5、表达式的不同

因为列表生成元素表达式,可以是有返回值的函数。因此就有一些其他用法。

2.2.5.1、表达式是函数

OldList = ['   AA', '  BB ', 'CC  ']
TestList = [i.strip() for i in OldList]
# strip():去掉前后空格

print(TestList)
# ['AA', 'BB', 'CC']

2.2.5.2、表达式是元组

TestList = [(x, x**2) for x in range(6)]

print(TestList)
# [(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25)]

注意:使用元组必须带小括号。

# 没带小括号
TestList = [x, x**2 for x in range(6)]
print(TestList)

# 错误信息
/Scripts/python.exe d:/05.ProjectWork/00.Python/00.Project/test_python/test.py
  File "d:/05.ProjectWork/00.Python/00.Project/test_python/test.py", line 192
    TestList = [x, x**2 for x in range(6)]
                          ^
SyntaxError: invalid syntax

2.2.5.2、表达式是复杂的表达式和嵌套函数

from math import pi
TestList = [str(round(pi, i)) for i in range(1, 9)]

print(TestList)
# ['3.1', '3.14', '3.142', '3.1416', '3.14159', '3.141593', '3.1415927', '3.14159265']

3、利用列表推导式实现乘法口诀

直接上代码:

print("\n".join([" ".join(["{}*{}={}".format(x, y, x*y) for x in range(1,y+1)]) for y in range(1,10)]))

结果如下:

1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81

执行结果

4、总结

其实我们看这些实例,他们的规律就是:

最前面的表达式就是最后这个值做了怎么样的处理。
后面的for、if语句,从左到右依次,一层一层嵌套进去,进行处理。

如果有问题,请指出,或者copy了谁的,也请指出。
会及时更正。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/91097.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

matlab使用教程(21)—求函数最值

1. 求函数最优值 1.1求一元函数的最小值 如果给定了一个一元数学函数,可以使用 fminbnd 函数求该函数在给定区间中的局部最小值。例如,请考虑 MATLAB 提供的 humps.m 函数。下图显示了 humps 的图。 x -1:.01:2; y humps(x); plot(x,y) xlabel(x)…

[管理与领导-50]:IT基层管理者 - 8项核心技能 - 5 - 沟通是润滑剂

目录 前言: 一、什么是沟通 1.1 定义 1.2 沟通模型 1.3 沟通的六层次模型 1.4 为什么需要沟通 二、沟通的五维度 三、沟通的原则 3.1 以终为始 3.2 双赢思维:人们只会做对自己有利的事 3.3 牵善的思维 四、沟通的过程 五、沟通技巧 六、深…

移动端和PC端对比【组件库+调试vconsole +构建vite/webpack+可视化echarts/antv】

目录 组件库 移动端 vue vant PC端 react antd vue element 调试:vconsole vs dev tools中的控制台(Console) ​​​​​​​vconsole:在真机上调试 构建工具 webpack 原理 Babel:JS编译器(…

sql server 快速安装

目录标题 一、下载二、直接选择基本安装二、下载ssms(数据库图形化操作页面)三、开启sa账号认证(一)第一步:更改身份验证模式(二)第二步:启用 sa 登录四、开启tcp/ip 一、下载 下载…

Visual Studio 2022 右键单击项目没有出现View | View Class Diagram(Visual Studio 无法使用类设计器)

文章目录 问题描述原因.NET Core项目.NET Framework项目 其他VS2022相关文章 问题描述 当我们在Solution Explorer窗口右键单击项目时,快捷菜单中没有出现“查看”,或者出现了“查看”,但是“查看”里没有View Class Diagram。 原因 首先…

大彩串口屏使用记录

写在最前面 屏幕型号 DC10600M070 IDE VisualTFT(官方) VSCode(lua编程) 用之前看一下官方那个1小时的视频教程就大概懂控件怎么用了,用官方的软件VisualTFT很简单 本文只是简单记录遇到的一些坑 lua编辑器 VisualTF…

设计模式之抽象工厂

文章目录 一、介绍二、基本组件三、演示案例1. 定义抽象工厂2. 定义抽象产品3. 定义具体工厂4. 定义具体产品5. 代码演示6. 代码改造 四、总结 一、介绍 抽象工厂模式(Abstract Factory Pattern)属于创建型设计模式。用于解决比工厂方法设计模式更加复杂的问题。 复杂到哪里了…

时序预测 | MATLAB实现PSO-KELM粒子群算法优化核极限学习机时间序列预测(含KELM、ELM等对比)

时序预测 | MATLAB实现PSO-KELM粒子群算法优化核极限学习机时间序列预测(含KELM、ELM等对比) 目录 时序预测 | MATLAB实现PSO-KELM粒子群算法优化核极限学习机时间序列预测(含KELM、ELM等对比)预测效果基本介绍模型介绍程序设计参…

【javaweb】学习日记Day3 - Ajax 前后端分离开发 入门

目录 一、Ajax 1、简介 2、Axios (没懂 暂留) (1)请求方式别名 (2)发送get请求 (3)发送post请求 (4)案例 二、前端工程化 1、Vue项目-目录结构 2、…

java 里面 long 转换int内存分析

了解补码知识点 要将补码转换为十进制,需要确定补码的符号位。如果补码的符号位为1,则表示为负数,否则表示为正数。 假设我们有一个补码为1 0110 1011 1100 1101 1000 0011 1101 1100 0010 1101 1111 1101 1100 0001 1100 0011 0100 首先&a…

在其他python环境中使用jupyter notebook

1、切换到目标python环境 activate 目标python环境 2、安装notebook内核包 pip install ipykernel 3、加环境加入到notebook中 python -m ipykernel install 目标python环境 4、切换到base环境 activate base 5、打开目标项目的对应盘 如果,项目在c盘&…

web基础http与apache

一、http相关概念: http概述: HTTP 是一种用作获取诸如 HTML 文档这类资源的协议。它是 Web 上进行任何数据交换的基础,同时,也是一种客户端—服务器(client-server)协议 为解决"用什么样的网络协…

二叉树链式结构的实现

文章目录 1.前置说明 2.二叉树的遍历 文章内容 1.前置说明 学习二叉树的基本操作前,需先要创建一棵二叉树,然后才能学习其相关的基本操作。由于现在我们对于二叉树的了解还处于初级阶段,所以我们手动创建一棵简单的二叉树,以便…

SPI2外设驱动-W25Q64 SPI接口初始化

前言 (1)本系列是基于STM32的项目笔记,内容涵盖了STM32各种外设的使用,由浅入深。 (2)小编使用的单片机是STM32F105RCT6,项目笔记基于小编的实际项目,但是博客中的内容适用于各种单片…

React 使用 useRef() 获取循环中所有子组件实例

目录 背景思考实现完整代码:成功运行后的界面如下: 知识点总结uesRef() 作对象处理useImperativeHandle() 父组件操作引入子组件的内部方法最后 背景 之前项目中使用了antd pro 中的 可编辑表格 (EditableProTable),在页面中表格要经过多层遍…

远程连接虚拟机中ubuntu报错:Network error:Connection refused

ping检测一下虚拟机 可以ping通,说明主机是没问题 #检查ssh是否安装: ps -e |grep ssh发现ssh没有安装 #安装openssh-server sudo apt-get install openssh-server#启动ssh service ssh startps -e |grep ssh检查一下防火墙 #防火墙状态查看 sudo ufw…

云原生之使用Docker部署SSCMS内容管理系统

云原生之使用Docker部署SSCMS内容管理系统 一、SSCMS介绍二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本 四、下载SSCMS镜像五、部署SSCMS内容管理系统5.1 创建SSCMS容器5.2 检查SSC…

2023.8 -java - 继承

继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。 继承的特性 子类拥有父类非 private 的属性、方法。 子类可以拥有自己的属性和方法…

深度学习11:Transformer

目录 什么是 Transformer? Encoder Decoder Attention Self-Attention Context-Attention 什么是 Transformer(微软研究院笨笨) RNN和Transformer区别 Universal Transformer和Transformer 区别 什么是 Transformer? ​ …

【校招VIP】TCP/IP模型之常用协议和端口

考点介绍: 大厂测试校招面试里经常会出现TCP/IP模型的考察,TCP/IP协议是网络基础知识,是互联网的基石,不管你是做开发、运维还是信息安全的,TCP/IP 协议都是你绕不过去的一环,程序员需要像学会看书写字一样…