Python——列表(list)推导式

news2024/11/24 14:47:18

本文基于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了谁的,也请指出。
会及时更正。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华纳云:ubuntu下nginx服务器如何配置

在Ubuntu操作系统上配置Nginx服务器涉及以下步骤。这里我将提供一个基本的配置示例,你可以根据自己的需求进行修改和定制。 安装 Nginx: 打开终端,并输入以下命令来安装 Nginx: sudo apt update sudo apt install nginx 启动 …

【剑指offer】【C语言】调整数组中奇偶数顺序_冒泡法+二分法_调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分

题目: 输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。 示例:{4,6,5,7,2,3…

2023.8 - java - Number类和Math类

一般地,当需要使用数字的时候,我们通常使用内置数据类型,如:byte、int、long、double 等。 然而,在实际开发过程中,我们经常会遇到需要使用对象,而不是内置数据类型的情形。为了解决这个问题&a…

时序分解 | MATLAB实现基于SVMD逐次变分模态分解的信号分解分量可视化

时序分解 | MATLAB实现基于SVMD逐次变分模态分解的信号分解分量可视化 目录 时序分解 | MATLAB实现基于SVMD逐次变分模态分解的信号分解分量可视化效果一览基本介绍程序设计参考资料 效果一览 基本介绍 SVMD分解算法,分解结果可视化,MATLAB程序&#xff…

【微服务学习笔记】认识微服务

【微服务学习笔记】认识微服务 单体架构 分布式架构 微服务架构 SpringCloud 服务拆分和注意事项 服务拆分的案例demo 各个服务之间的数据库都是相互独立的,你不能直接访问对方的数据库,只能从一个服务像另外一个服务发起远程调用 在订单模块的服务中 …

【面试经典150题】移除元素·JavaScript版

题目来源 大致思路:遍历数组,如果遇到值为val的元素,使用数组最后一个元素替换它。详细过程: /*** param {number[]} nums* param {number} val* return {number}*/ var removeElement function(nums, val) {let i0,nnums.leng…

【数据库】表操作 习题总结

目录 关系建表 数据库sql的执行顺序 内外连接的写法 1.设计一张商品表 2.设计一张老师表 3.设计一张图书表 4.查询练习 5.查询练习 6.设计一个考勤系统 7.设计一个学校宿舍管理系统 8.设计一个车辆违章系统 9.设计一个学校食堂管理系统 10.有一张员工表emp&#xf…

Redis三种持久化方式详解

一、Redis持久性 Redis如何将数据写入磁盘 持久性是指将数据写入持久存储,如固态磁盘(SSD)。Redis提供了一系列持久性选项。其中包括: RDB(快照):RDB持久性以指定的时间间隔执行数据集的时间点…

wazuh初探系列二 :Wazuh功能初步探知

目录 介绍 主动响应: 监控日志 "bin"目录用途: 告警信息: etc 目录中包含了以下主要的配置文件: ruleset:自带规则库,建议不改 rules目录: 解码器: 登录日志格式&#xff1a…

使用kubeadm方式快速部署一个K8S集群

目录 一、环境准备 二、环境初始化 三、在所有主机上安装相关软件 1、安装docker 2、配置k8s的yum源 3、安装kubelet、kubeadm、kubectl 四、部署Kubernetes Master 五、加入Kubernets Node 六、部署CNI网络插件 七、测试k8s集群 一、环境准备 我的是CentOS7系统&am…

C++Qt堆叠窗体的使用案例

本博文源于笔者最近学习的Qt,内容讲解堆叠窗体QStackedWidget案例,效果是选择左侧列表框中不同的选项时,右侧显示所选的不同的窗体。 案例效果 案例书写过程 控件都是动态创建的,因此.h文件需要创建控件,.cpp书写业务…

Android NDK JNI与Java的相互调用

一、Jni调用Java代码 jni可以调用java中的方法和java中的成员变量,因此JNIEnv定义了一系列的方法来帮助我们调用java的方法和成员变量。 以上就是jni调用java类的大部分方法,如果是静态的成员变量和静态方法,可以使用***GetStaticMethodID、CallStaticObjectMethod等***。就…

[SpringBoot3]Web服务

五、Web服务 基于浏览器的B/S结构应用十分流行。SpringBoot非常适合Web应用开发,可以使用嵌入式Tomcat、Jetty、Undertow或Netty创建一个自包含的HTTP服务器。一个SpringBoot的Web应用能够自己独立运行,不依赖需要安装的Tomcat、Jetty等。SpringBoot可以…

如何在Windows、Mac和Linux操作系统上安装Protocol Buffers(protobuf)编译器

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

TLSv1.2抓包解密分析过程之RSA_WITH_AES_128_CBC_SHA

RSA_WITH_AES_128_CBC_SHA是TLSv1.2中最简单的加密协议了,非常适合用于学习TLSv1.2的握手过程。 RSA_WITH_AES_128_CBC_SHA表示 使用RSA非对称加密进行密钥协商使用AES128 CBC模式加密Hash算法使用SHA-1 参考文档:rfc5246 rfc5077 rfc7627 1. t…

Kyligence Copilot 登陆海外,斩获 Product Hunt 日榜 TOP 2

8月14日,AI 数智助理 Kyligence Copilot 在全球知名科技产品平台 Product Hunt 上线,其以出色的产品创新实力,在激烈的竞争中脱颖而出,仅仅在 24 小时内收获了超过 400 个投票和近 200 条支持评论,荣登当日产品榜排名第…

Microsoft正在将Python引入Excel

Excel和Python这两个世界正在碰撞,这要归功于Microsoft的新集成,以促进数据分析和可视化 Microsoft正在将流行的编程语言Python引入Excel。该功能的公共预览版现已推出,允许Excel用户操作和分析来自Python的数据。 “您可以使用 Python 绘图…

远程端口转发 实践 如何将物理机某一端口的服务转发到vps上,使得外网能访问到

以本机1470端口(我的sqli-labs)与vps的9023端口为例。 SSH基本的连接命令是: ssh usernamehostname这里牵扯到了两台主机,一是执行命令、运行SSH客户端的主机,我们称为本地主机A【Host A】;二是接收连接请…

记录某一次演讲

大家好,我是繁依,是一名软件工程的学生。很高兴能站在这里,与大家分享一下自己日常数据分析学习的经验。首先,我先来介绍一下自己常用的学习资源和工具,学习平台及资源有哔哩哔哩、掘金小册、和鲸社区、飞桨社区等 常…

ECharts配合Node.js爬虫实现数据可视化

数据可视化简介 可视化技术是将数据和信息以图形化的方式展示出来,以便更好地理解和分析。可视化技术通常使用各种图表、图形、动画和交互式效果来呈现数据。可视化技术有以下几个基本概念: 数据:可视化技术的基础是数据。数据可以是数字、文…