当前位置: 首页 > news >正文

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.pyFile "d:/05.ProjectWork/00.Python/00.Project/test_python/test.py", line 192TestList = [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了谁的,也请指出。
会及时更正。

相关文章:

Python——列表(list)推导式

本文基于python3。 目录 1、Python推导式2、列表(list)推导式2.1、定义2.2、实际操作2.2.1、一个表达式,后面为一个 for 子句2.2.2、一个表达式,后面为一个 for 子句,然后,跟着if 子句。2.2.3、一个表达式,后面为一个…...

代码随想录算法训练营day43 | LeetCode 1049. 最后一块石头的重量 II 494. 目标和 474. 一和零

1049. 最后一块石头的重量 II(题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台) 思路:把全部石头重量加起来,然后除以二,就等于背包的最大容量。然后就可以按照背包问题…...

Linux安装jdk、mysql、并部署Springboot项目

😜作 者:是江迪呀✒️本文关键词:Linux、环境安装、JDK安装、MySQL、MySQL安装☀️每日 一言:知行合一! 文章目录 一、前言二、安装步骤2.1 安装JDK(1)创建文件夹(便于后…...

tomcat更改端口号和隐藏端口号

因为默认端口:8080不会自动隐藏,因此为了更显格调需要将其改为:80 进入tomcat的server文件 将其改为80,之后将tomcat重新启动即可 tomcat启动流程 [rootshang ~]# cd /usr/local/tomcat/apache-tomcat-8.5.92 [rootshang apache-tomcat-8.5.92]# cd b…...

生信分析Python实战练习 2 | 视频19

开源生信 Python教程 生信专用简明 Python 文字和视频教程 源码在:https://github.com/Tong-Chen/Bioinfo_course_python 目录 背景介绍 编程开篇为什么学习Python如何安装Python如何运行Python命令和脚本使用什么编辑器写Python脚本Python程序事例Python基本语法 数…...

wps设置其中几页为横版

问题:写文档的时候,有些表格列数太多,页面纵向显示内容不完整,可以给它改成横向显示。 将鼠标放在表格上一页的底部,点击‘插入-分页-下一页分节符’。 将鼠标放在表格页面的底部,点击‘插入-分页-下一页分…...

如何在Ubuntu 22.04上安装PHP 8.1并设置本地开发环境

引言 PHP是一种流行的服务器脚本语言,用于创建动态和交互式web页面。开始使用你选择的语言是学习编程的第一步。 本教程将指导您在Ubuntu上安装PHP 8.1,并通过命令行设置本地编程环境。您还将安装依赖管理器Composer,并通过运行脚本来测试您…...

wazuh安装与使用

目录 一、wazuh安装 二、wazuh使用 一、wazuh安装 下载:https://wazuh.com 可以直接安装OVA这个,然后导入到Linux中就可以使用了。 导入完毕后开启,使用远程连接工具进行连接,出现以下画面则成功了。 之后可以看一下图形化界面…...

Vue 3 常见面试题汇总

前端面试题库 (面试必备) 推荐:★★★★★ 地址:前端面试题库 前言 最近两年许多大厂都在实行“降本增效”、“优化组织架构”,然后“为社会输送了大量人才”,今年(2023&#xff…...

Docker是什么?详谈它的框架、使用场景、优势

作者:Insist-- 个人主页:insist--个人主页 作者会持续更新网络知识和python基础知识,期待你的关注 目录 一、什么是 Docker? 二、Docker 的架构 1、Docker客户端 2、Docker守护进程 3、Docker镜像 4、Docker容器 5、Docker…...

neo4j

UNWIND 将列表里的值展开 CREATE (N0:Person {name: Anders}) CREATE (N1:Person {name: Becky}) CREATE (N2:Person {name: Cesar}) CREATE (N3:Person {name: Dilshad}) CREATE (N4:Person {name: George}) CREATE (N5:Person {name: Filipa})CREATE (N0)-[:KNOWS]->(N3)…...

【项目 计网5】 4.15 TCP通信实现(服务器端)4.16 TCP通信实现(客户端)

文章目录 4.15 TCP通信实现&#xff08;服务器端&#xff09;4.16 TCP通信实现&#xff08;客户端&#xff09; 4.15 TCP通信实现&#xff08;服务器端&#xff09; // TCP 通信的服务器端// TCP 通信的服务器端 #include <stdio.h> #include <arpa/inet.h> #incl…...

windows可视化界面管理服务器上的env文件

需求&#xff1a;在 Windows 环境中通过可视化界面编辑位于 Linux 主机上的 env 文件的情况&#xff0c;我现在环境是windows环境&#xff0c;我的env文件在linux的192.168.20.124上&#xff0c;用户是op&#xff0c;密码是op&#xff0c;文件绝对路径是/home/op/compose/env …...

自然语言处理在智能客服和聊天机器人中的应用

文章目录 1. 引言2. NLP基础2.1 词法分析2.2 语法分析2.3 语义理解2.4 情感分析 3. 智能客服中的应用3.1 自动问答3.2 意图识别3.3 情感分析与情绪识别 4. 聊天机器人中的应用4.1 对话生成4.2 上下文理解 5. 技术原理与挑战5.1 语言模型5.2 数据质量和多样性5.3 上下文理解 6. …...

为什么不建议使用@Async注解创建线程

1 前言 在很久很久之前&#xff0c;我有一段痛苦的记忆。那种被故障所驱使的感觉&#xff0c;在我脑海里久久无法驱散。 原因无它&#xff0c;有小伙伴开启了线程池的暴力使用模式。没错&#xff0c;就是下面这篇文章。 夺命故障 ! 炸出了投资人&#xff01; 我有必要简单的…...

更新Ubuntu18.04上的CUDA和GCC

问题&#xff1a; 有一台服务器的GPU是1080&#xff0c;有八张卡&#xff0c;已经好久没有人用了。cuda版本是10.1,我现在拿来复现一些论文的模型&#xff0c;经常遇到版本依赖问题&#xff0c;报错Driver is too old。所以要更新一下驱动。遇到的主要问题是gcc版本也太低了&am…...

算法通过村第6关【青铜】| 如何通过中序和后序遍历恢复二叉树

中序&#xff1a;3 4 8 6 7 5 2 1 10 9 11 15 13 14 12 后序&#xff1a;8 7 6 5 4 3 2 10 15 14 13 12 11 9 1 通过这两个遍历顺序恢复二叉树 首先我们知道中序遍历顺序左中右&#xff0c;后序遍历顺序左右中 第一步&#xff1a; 由后序遍历确定根结点为1 > 由中序遍历…...

高斯牛顿法和LM算法异同示例

LM&#xff08;Levenberg-Marquardt&#xff09;算法和高斯牛顿&#xff08;Gauss-Newton&#xff09;算法是两种用于非线性最小二乘问题的优化算法&#xff0c;它们也有一些相似之处&#xff1a; 迭代优化&#xff1a;LM算法和高斯牛顿算法都使用迭代的方式来优化参数值&#…...

奥威BI财务数据分析方案:只做老板想看的

奥威BI财务数据分析方案是一套从老板的视角出发&#xff0c;做老板想看的财务数据分析报表&#xff0c;帮助老板更好地了解公司的财务状况和经营绩效的综合性智能财务数据分析方案&#xff0c;可实现财务数据分析可视化、灵活自主性&#xff0c;随时为老板提供最为直观的财务数…...

opencv进阶19-基于opencv 决策树cv::ml::DTrees 实现demo示例

opencv 中创建决策树 cv::ml::DTrees类表示单个决策树或决策树集合&#xff0c;它是RTrees和 Boost的基类。 CART是二叉树&#xff0c;可用于分类或回归。对于分类&#xff0c;每个叶子节点都 标有类标签&#xff0c;多个叶子节点可能具有相同的标签。对于回归&#xff0c;每…...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下&#xff0c;虚拟教学实训宛如一颗璀璨的新星&#xff0c;正发挥着不可或缺且日益凸显的关键作用&#xff0c;源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例&#xff0c;汽车生产线上各类…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的&#xff0c;比GNOME简单得多&#xff01; 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题&#xff1a; 指定音频引擎与设备&#xff1b;播放音频文件 本文所使用的环境&#xff1a; Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...

华为OD机考-机房布局

import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...

区块链技术概述

区块链技术是一种去中心化、分布式账本技术&#xff0c;通过密码学、共识机制和智能合约等核心组件&#xff0c;实现数据不可篡改、透明可追溯的系统。 一、核心技术 1. 去中心化 特点&#xff1a;数据存储在网络中的多个节点&#xff08;计算机&#xff09;&#xff0c;而非…...