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.mzph.cn/bicheng/48317.shtml

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

相关文章

iPad型号数据解析:了解不同iPad型号的连接和扩展性能力

iPad是一款非常受欢迎的平板电脑,拥有多种型号和规格可供选择。在本篇文章中,我们将深入研究不同iPad型号的连接和扩展性能。数据源来自于挖数据平台,该平台提供了全面的iPad型号数据,共计1485个型号。 首先,让我们来…

【D3.js in Action 3 精译_020】2.6 用 D3 设置与修改元素样式 + 名人专访(Nadieh Bremer)+ 2.7 本章小结

当前内容所在位置 第一部分 D3.js 基础知识 第一章 D3.js 简介(已完结) 1.1 何为 D3.js?1.2 D3 生态系统——入门须知1.3 数据可视化最佳实践(上)1.3 数据可视化最佳实践(下)1.4 本章小结 第二章…

怎样用Java程序与数据库建立联系?

首先我们要了解一下JDBC,一个为Java程序与关系型数据库交互提供便利的API(应用程序编程接口), 本期我们尝试用Java编程软件IDEA与MYSQL数据库建立联系。 首先我们在IDEA中穿件一个(SQL),然后导…

系统编程--Linux下文件其他操作

这里写目录标题 文件存储理论补充dentry、inode 文件其他操作stat函数作用函数原型代码(以获取文件大小为例)补充(获取文件类型) lstat函数作用函数原型代码补充(获取文件权限)总结 tipslink函数作用简介函…

畅玩游戏新选择 :游戏本 Windows10 64位 专业版!

对于喜欢游戏竞技的玩家而言,选择一款合适的操作系统对于提升游戏体验至关重要。为了满足这一需求,系统之家小编将带来高性能的游戏本专用Win10操作系统。这一版本系统不仅注重游戏的稳定性,还针对玩家在游戏中可能遇到的超时检测和恢复&…

收银系统源码-千呼新零售收银视频介绍

千呼新零售2.0系统是零售行业连锁店一体化收银系统,包括线下收银线上商城连锁店管理ERP管理商品管理供应商管理会员营销等功能为一体,线上线下数据全部打通。 适用于商超、便利店、水果、生鲜、母婴、服装、零食、百货、宠物等连锁店使用。 详细介绍请…

JavaScript 模板字符串:让字符串拼接变得更优雅

在 JavaScript 开发中,字符串拼接是一个常见的需求。从简单的用户界面文本生成到复杂的动态数据格式化,字符串操作无处不在。传统的字符串拼接方法虽然功能强大,但往往显得冗长且难以阅读。为了解决这一问题,ES6(ECMAS…

240718_使用Labelme制作自己的图像分割数据集

240718_使用Labelme制作自己的图像分割数据集 从目标检测入门的朋友们可能更熟悉的是LabelImg,这里要注意做好区分,LabelImg和Labelme不是一个东西,如下经典图: (a)图像分类(目标检测&#xff…

Mysql深入讲解(索引、事务、锁机制)

一、MySQL索引 1、何为索引? MySQL中的索引是一种数据结构,用于加快对数据库表中数据的查询速度【查询速度提升】。它类似于书本目录,使得用户可以根据特定字段快速定位到所需的数据行,而无需扫描整个表。 2、索引分类 Hash索…

怎样对 PostgreSQL 中的慢查询进行分析和优化?

🍅关注博主🎗️ 带你畅游技术世界,不错过每一次成长机会!📚领书:PostgreSQL 入门到精通.pdf 文章目录 怎样对 PostgreSQL 中的慢查询进行分析和优化?一、理解慢查询的危害二、找出慢查询&#x…

Linux可视化工具-netdata之docker安装

版本要求 docker cli安装 docker pull netdata/netdata docker run -d --namenetdata \ --pidhost \ --networkhost \ -v netdataconfig:/etc/netdata \ -v netdatalib:/var/lib/netdata \ -v netdatacache:/var/cache/netdata \ -v /:/host/root:ro,rslave \ -v /etc/passwd…

[集成学习]基于python的Stacking分类模型的客户购买意愿分类预测

1 导入必要的库 import pandas as pd import numpy as np import missingno as msno import matplotlib.pyplot as plt from matplotlib import rcParams import seaborn as sns from sklearn.metrics import roc_curve, auc from sklearn.linear_model import LogisticRegres…

业务架构、数据架构、应用架构和技术架构分析

一文看懂:什么是业务架构、数据架构、应用架构和技术架构 TOGAF(开放集团架构框架)是企业广泛应用的架构设计和管理利器。其核心在于四大架构领域:业务、数据、应用和技术,助力组织高效运作。TOGAF,让架构设…

【深度学习入门篇 ⑩】Seq2Seq模型:语言翻译

【🍊易编橙:一个帮助编程小伙伴少走弯路的终身成长社群🍊】 大家好,我是小森( ﹡ˆoˆ﹡ ) ! 易编橙终身成长社群创始团队嘉宾,橙似锦计划领衔成员、阿里云专家博主、腾讯云内容共创官…

【Sklearn-混淆矩阵】一文搞懂分类模型的基础评估指标:混淆矩阵ConfusionMatrixDisplay

【Sklearn-混淆矩阵】一文搞懂分类模型的基础评估指标:混淆矩阵ConfusionMatrixDisplay 本次修炼方法请往下查看 🌈 欢迎莅临我的个人主页 👈这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合,智慧小天地! &…

unity渲染人物模型透明度问题

问题1:有独立的手和衣服的模型,但最终只渲染出来半透明衣服 问题2:透明度贴图是正确的但显示却不正确 这上面两个模型的问题都是因为人物模型是一个完整的,为啥有些地方可以正常显示,有些地方透明度却有问题。 其中…

使用C#实现无人超市管理系统——数据结构课设(代码+PPT+说明书)

说明:这是自己做的课程设计作业,得分情况98/100 如果想要获取私信我 本项目采用线性表中的链表来进行本次系统程序的设计。链表分为两条线,分别是存储用户信息和商品信息,并且都设为公共属性,方便对用户信息和商品信息…

艺术与技术的交响曲:CSS绘图的艺术与实践

在前端开发的世界里,CSS(层叠样式表)作为网页布局和样式的基石,其功能早已超越了简单的颜色和间距设置。近年来,随着CSS3的普及,开发者们开始探索CSS在图形绘制方面的潜力,用纯粹的代码创造出令…

基于python深度学习遥感影像地物分类与目标识别、分割实践技术应用

目录 专题一、深度学习发展与机器学习 专题二、深度卷积网络基本原理 专题三、TensorFlow与Keras介绍与入门 专题四、PyTorch介绍与入门 专题五、卷积神经网络实践与遥感图像场景分类 专题六、深度学习与遥感图像检测 专题七、遥感图像检测案例 专题八、深度学习与遥感…

字节码编程之bytebuddy结合javaagent支持多种监控方式

写在前面 打印方法执行耗时是监控,获取程序运行的JVM信息是监控,链路追踪也是监控。 本文看下如何实现一个通用的监控解决方案。 1:程序 定义premain: package com.dahuyou.multi.monitor;import com.dahuyou.multi.monitor.…