Python list comprehension (列表推导式 - 列表解析式 - 列表生成式)

Python list comprehension {列表推导式 - 列表解析式 - 列表生成式}

  • 1. Python list comprehension (列表推导式 - 列表解析式 - 列表生成式)
  • 2. Example
  • 3. Example
  • References

Python 中的列表解析式并不是用来解决全新的问题,只是为解决已有问题提供新的语法。

列表推导式的优点是相比于 for 循环更高效,因为列表推导式在执行时调用的是 Python 的底层 C 代码,而 for 循环则是用 Python 代码来执行。

1. Python list comprehension (列表推导式 - 列表解析式 - 列表生成式)

在这里插入图片描述

列表推导式的语法结构:

  • [] 定义列表的中括号。
  • for 循环初步定义列表。
  • (可选) 在 for 循环后面可以使用 if 语句进行过滤。
  • for 循环前的是列表的元素表达式,可以是任意的表达式。可以是 for 循环中的元素本身,可以是元素进行运算后的结果,可以是元素组成的元组或者列表,可以是一个函数,甚至可以是另一个列表解析式 (嵌套列表解析式)。
  • (可选) 在 for 循环后面可以再嵌套 for 循环。
#!/usr/bin/env python
# -*- coding: utf-8 -*-from __future__ import absolute_import
from __future__ import division
from __future__ import print_functionlist_data = [i for i in range(10)]
square_data = [i ** 2 for i in range(10)]print(list_data)
print(square_data)
/usr/bin/python3.5 /home/strong/sunergy_moonergy_work/yongqiang.py
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]Process finished with exit code 0

列表解析让你只需编写一行代码就能生成列表。列表解析将 for 循环和创建新元素的代码合并成一行,并自动附加新元素。

使用列表解析创建平方数列表:

#!/usr/bin/env python3
# -*- coding:utf-8 -*-squares = [value ** 2 for value in range(1, 11)]print(squares)

要使用这种语法,首先指定一个描述性的列表名,例如 squares。然后,指定一个左方括号,并定义一个表达式,用于生成你要存储到列表中的值。表达式为 value ** 2,它计算平方值。接下来,编写一个 for 循环,用于给表达式提供值,再加上右方括号。在这个示例中,for 循环为 for value in range(1, 11),它将值 1 ~ 10 提供给表达式 value ** 2

这里的 for 语句末尾没有冒号。

/usr/bin/python3.5 /home/strong/workspace/master.py
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]Process finished with exit code 0

在这里插入图片描述

The if statement in list comprehension is optional. For every item in list, execute the expression if the condition is True.

[expression for item in list if condition == True]

2. Example

#!/usr/bin/env python
# -*- coding: utf-8 -*-from __future__ import absolute_import
from __future__ import division
from __future__ import print_functionlist_data_1 = list(range(1, 11))
list_data_2 = list(range(10))square_data = [i * i for i in range(10)]
list_comprehension_a = [i * 2 for i in list_data_2]
list_comprehension_b = [x for x in list_data_2 if x >= 5]
list_comprehension_c = [(x, x * 2) for x in range(10)]
list_comprehension_d = [[x, x * 2] for x in range(10)]matrix_data = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
list_comprehension_e = [num for row in matrix_data for num in row]list_comprehension_f = [n for n in list_data_2 if n % 2 == 1]print("list_data_1:", list_data_1)
print("list_data_2:", list_data_2)
print("square_data:", square_data)
print("list_comprehension_a:", list_comprehension_a)
print("list_comprehension_b:", list_comprehension_b)
print("list_comprehension_c:", list_comprehension_c)
print("list_comprehension_d:", list_comprehension_d)
print("list_comprehension_e:", list_comprehension_e)
print("list_comprehension_f:", list_comprehension_f)
/usr/bin/python3.5 /home/strong/sunergy_moonergy_work/yongqiang.py
list_data_1: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
list_data_2: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
square_data: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
list_comprehension_a: [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
list_comprehension_b: [5, 6, 7, 8, 9]
list_comprehension_c: [(0, 0), (1, 2), (2, 4), (3, 6), (4, 8), (5, 10), (6, 12), (7, 14), (8, 16), (9, 18)]
list_comprehension_d: [[0, 0], [1, 2], [2, 4], [3, 6], [4, 8], [5, 10], [6, 12], [7, 14], [8, 16], [9, 18]]
list_comprehension_e: [1, 2, 3, 4, 5, 6, 7, 8, 9]
list_comprehension_f: [1, 3, 5, 7, 9]Process finished with exit code 0

3. Example

#!/usr/bin/env python
# -*- coding: utf-8 -*-from __future__ import absolute_import
from __future__ import division
from __future__ import print_functionkeypoints = list(range(1, 76))
list_comprehension_keypoints = [keypoints[i:i + 3] for i in range(0, len(keypoints), 3)]print("keypoints:", keypoints)
print("list_comprehension_keypoints:", list_comprehension_keypoints)
/usr/bin/python3.5 /home/strong/sunergy_moonergy_work/yongqiang.py
keypoints: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75]
list_comprehension_keypoints: [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15], [16, 17, 18], [19, 20, 21], [22, 23, 24], [25, 26, 27], [28, 29, 30], [31, 32, 33], [34, 35, 36], [37, 38, 39], [40, 41, 42], [43, 44, 45], [46, 47, 48], [49, 50, 51], [52, 53, 54], [55, 56, 57], [58, 59, 60], [61, 62, 63], [64, 65, 66], [67, 68, 69], [70, 71, 72], [73, 74, 75]]Process finished with exit code 0

References

[1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/
[2] (美) Eric Matthes (埃里克•马瑟斯) 著, 袁国忠 译. Python 编程:从入门到实践[M]. 北京:人民邮电出版社, 2016. 1-459

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(10)深入理解pandas的核心数据结构:DataFrame高效数据清洗技巧

目录 前言1. DataFrame数据清洗1.1 处理缺失值(NaNs)1.1.1 数据准备1.1.2 读取数据1.1.3 查找具有 null 值或缺失值的行和列1.1.4 计算每列缺失值的总数1.1.5 删除包含 null 值或缺失值的行1.1.6 利用 .fillna() 方法用Portfolio …

Windows搭建RTMP视频流服务器

参考了一篇文章,见文末。 博客中nginx下载地址失效,附上一个有效的地址: Index of /download/ 另外,在搭建过程中,遇到的问题总结如下: 1 两个压缩包下载解压并重命名后,需要 将nginx-rtmp…

如何使用简鹿水印助手或 Photoshop 给照片添加文字

在社交媒体中,为照片添加个性化的文字已经成为了一种流行趋势。无论是添加注释、引用名言还是表达情感,文字都能够为图片增添额外的意义和风格。本篇文章将使用“简鹿水印助手”和“Adobe Photoshop”这两种工具给照片添加文字的详细步骤。 使用简鹿水印…

【python基础】组合数据类型:元组、列表、集合、映射

文章目录 一. 序列类型1. 元组类型2. 列表类型(list)2.1. 列表创建2.2 列表操作2.3. 列表元素遍历 ing元素列表求平均值删除散的倍数 二. 集合类型(set)三. 映射类型(map)1. 字典创建2. 字典操作3. 字典遍历…

【EI检索】第二届机器视觉、图像处理与影像技术国际会议(MVIPIT 2024)

一、会议信息 大会官网:www.mvipit.org 官方邮箱:mvipit163.com 会议出版:IEEE CPS 出版 会议检索:EI & Scopus 检索 会议地点:河北张家口 会议时间:2024 年 9 月 13 日-9 月 15 日 二、征稿主题…

【香橙派开发板测试】:在黑科技Orange Pi AIpro部署YOLOv8深度学习纤维分割检测模型

文章目录 🚀🚀🚀前言一、1️⃣ Orange Pi AIpro开发板相关介绍1.1 🎓 核心配置1.2 ✨开发板接口详情图1.3 ⭐️开箱展示 二、2️⃣配置开发板详细教程2.1 🎓 烧录镜像系统2.2 ✨配置网络2.3 ⭐️使用SSH连接主板 三、…

Web开发:图片九宫格与非九宫格动态切换效果(HTML、CSS、JavaScript)

目录 一、业务需求 二、实现思路 三、实现过程 1、基础页面 2、图片大小调整 3、图片位置调整 4、鼠标控制切换 5、添加过渡 四、完整代码 一、业务需求 默认显示基础图片; 当鼠标移入,使用九宫格效果展示图片; 当鼠标离开&#…

CTF-Web习题:[BJDCTF2020]ZJCTF,不过如此

题目链接:[BJDCTF2020]ZJCTF,不过如此 解题思路 访问靶场链接,出现的是一段php源码,接下来做一下代码审阅,发现这是一道涉及文件包含的题 主要PHP代码语义: file_get_contents($text,r); 把$text变量所…

基于NeRF的路面重建算法——RoME / EMIE-MAP / RoGS

基于NeRF的路面重建算法——RoME / EMIE-MAP / RoGS 1. RoMe1.1 Mesh Initialization / Waypoint Sampling1.2 Optimization1.3 Experiments 2. EMIE-MAP2.1 Road Surface Representation based on Explicit mesh and Implicit Encoding2.2 Optimizing Strategies2.3 Experimen…

Uniapp鸿蒙项目实战

Uniapp鸿蒙项目实战 24.7.6 Dcloud发布了uniapp兼容鸿蒙的文档:Uniapp开发鸿蒙应用 在实际使用中发现一些问题,开贴记录一下 设备准备 windows电脑准备(家庭版不行,教育版、企业版、专业版也可以,不像uniapp说的只有…

Promise 详解(原理篇)

目录 什么是 Promise 实现一个 Promise Promise 的声明 解决基本状态 添加 then 方法 解决异步实现 解决链式调用 完成 resolvePromise 函数 解决其他问题 添加 catch 方法 添加 finally 方法 添加 resolve、reject、race、all 等方法 如何验证我们的 Promise 是否…

分布式搜索之Elasticsearch入门

Elasticsearch 是什么 Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。作为 Elastic Stack 的核心,它集中存储您的数据,帮助您发现意料之中以及意料之外的情况。 Elastic Stack 又是什么呢&a…

企业须善用数字化杠杆经营获取数字化时代红利

​在当今数字化时代,企业面临着新机遇和新挑战。数字化技术的迅速发展正在重塑商业格局,企业若能善用数字化杠杆经营,将能够在激烈的市场竞争中脱颖而出,获取丰厚的时代红利。 数字化杠杆的内涵 数字化杠杆是指企业借助数字化技术…

SAPUI5基础知识16 - 深入理解MVC架构

1. 背景 经过一系列的练习,相信大家对于SAPUI5的应用程序已经有了直观的认识,我们在练习中介绍了视图、控制器、模型的概念和用法。在本篇博客中,让我们回顾总结下这些知识点,更深入地理解SAPUI5的MVC架构。 首先,让…

Android 性能优化之卡顿优化

文章目录 Android 性能优化之卡顿优化卡顿检测TraceView配置缺点 StricktMode配置违规代码 BlockCanary配置问题代码缺点 ANRANR原因ANRWatchDog监测解决方案 Android 性能优化之卡顿优化 卡顿检测 TraceViewStricktModelBlockCanary TraceView 配置 Debug.startMethodTra…

XMl基本操作

引言 使⽤Mybatis的注解⽅式,主要是来完成⼀些简单的增删改查功能. 如果需要实现复杂的SQL功能,建议使⽤XML来配置映射语句,也就是将SQL语句写在XML配置⽂件中. 之前,我们学习了,用注解的方式来实现MyBatis 接下来我们…

【STM32】按键控制LED光敏传感器控制蜂鸣器(江科大)

一、按键控制LED LED.c #include "stm32f10x.h" // Device header/*** 函 数:LED初始化* 参 数:无* 返 回 值:无*/ void LED_Init(void) {/*开启时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENAB…

数据结构(稀疏数组)

简介 稀疏数组是一种数据结构,用于有效地存储和处理那些大多数元素都是零或者重复值的数组。在稀疏数组中,只有非零或非重复的元素会被存储,从而节省内存空间。 案例引入 假如想把下面这张表存入文件,我们会怎么做?…

超简单安装指定版本的clickhouse

超简单安装指定版本的clickhouse 命令执行shell脚本 idea连接 命令执行 参考官网 # 下载脚本 wget https://raw.githubusercontent.com/183461750/doc-record/d988dced891d70b23c153a3bbfecee67902a3757/middleware/data/clickhouse/clickhouse-install.sh # 执行安装脚本(中…

记录些Spring+题集(12)

11种API性能优化方法 一、索引优化 接口性能优化时,大家第一个想到的通常是:优化索引,优化索引的成本是最小的。 你可以通过查看线上日志或监控报告,发现某个接口使用的某条SQL语句耗时较长。 这条SQL语句是否已经加了索引&…