python-list-comprehension

Python–列表理解

原文:https://www.geeksforgeeks.org/python-list-comprehension/

Python 以鼓励开发人员和程序员编写高效、易于理解且几乎易于阅读的代码而闻名。该语言最有特色的方面之一是 python 列表和列表压缩特性,可以在一行代码中使用这些特性来构建强大的功能。

列表理解用于从元组、字符串、数组、列表等其他项创建新列表。列表理解由包含表达式的括号组成,该表达式与 for 循环一起对每个元素执行,以迭代每个元素。

语法:

新列表**=****【表达式(元素)元素旧列表中如果条件】**

列表理解的优势

  • 比循环更节省时间和空间。
  • 需要更少的代码行。
  • 将迭代语句转换为公式。

列表理解与 For 循环

有多种方法可以遍历列表。然而,最常见的方法是将 用于循环。让我们看看下面的例子:

蟒蛇 3

# Empty list
List = []# Traditional approach of iterating
for character in 'Geeks 4 Geeks!':List.append(character)# Display list
print(List)

输出:

[‘G ‘,’ e ‘,’ e ‘,’ k ‘,’ s ‘,’ ‘,’ 4 ‘,’ ‘,’ G ‘,’ e ‘,’ e ‘,’ k ‘,’ s ‘,’!’]

上面是迭代列表、字符串、元组等传统方法的实现。现在列表理解做同样的任务,也使程序更简单。

列表理解将用于循环的传统迭代方法转化为简单的公式,从而使它们易于使用。下面是遍历列表、字符串、元组等的方法。使用列表理解。

蟒蛇 3

# Using list comprehension to iterate through loop
List = [character for character in 'Geeks 4 Geeks!']# Displaying list
print(List)

输出:

[‘G ‘,’ e ‘,’ e ‘,’ k ‘,’ s ‘,’ ‘,’ 4 ‘,’ ‘,’ G ‘,’ e ‘,’ e ‘,’ k ‘,’ s ‘,’!’]

列表理解在计算和编码空间和时间方面都比 for 循环更有效。通常,它们用一行代码编写。下面的程序描述了 for 循环和基于表现的列表理解之间的区别。

蟒蛇 3

# Import required module
import time# define function to implement for loop
def for_loop(n):result = []for i in range(n):result.append(i**2)return result# define function to implement list comprehension
def list_comprehension(n):return [i**2 for i in range(n)]# Driver Code # Calculate time takens by for_loop()
begin = time.time()
for_loop(10**6)
end = time.time()# Display time taken by for_loop()
print('Time taken for_loop:',round(end-begin,2))# Calculate time takens by list_comprehension()
begin = time.time()
list_comprehension(10**6)
end = time.time()# Display time taken by for_loop()
print('Time taken for list_comprehension:',round(end-begin,2))

输出:

Time taken for_loop: 0.56
Time taken for list_comprehension: 0.47

从上面的程序中,我们可以看到列表理解比循环理解要快得多。

嵌套列表理解

嵌套列表理解只不过是另一个列表理解中的列表理解,与循环的嵌套非常相似。下面是实现嵌套循环的程序:

蟒蛇 3

matrix = []for i in range(3):# Append an empty sublist inside the listmatrix.append([])for j in range(5):matrix[i].append(j)print(matrix)

输出:

[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]

现在,通过使用嵌套列表理解,可以在更少的代码行中生成相同的输出。

蟒蛇 3

# Nested list comprehension
matrix = [[j for j in range(5)] for i in range(3)]print(matrix)

输出:

[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]

列表理解和λ

Lambda 表达式不过是 Python 函数的简写表示。对 lambda 使用列表理解可以创建一个有效的组合。让我们看看下面的例子:

蟒蛇 3

# using lambda to print table of 10
numbers = []for i in range(1, 6):numbers.append(i*10)print(numbers)

输出:

[10, 20, 30, 40, 50]

这里,我们已经用 for 循环打印了 10 个表。

蟒蛇 3

numbers= [i*10 for i in range(1,6)]print(numbers)

输出:

[10, 20, 30, 40, 50]

现在,我们只使用列表理解来显示 10 个表。

蟒蛇 3

# using lambda to print table of 10
numbers = list(map(lambda i: i*10, [i for i in range(1,6)]))print(numbers)

输出:

[10, 20, 30, 40, 50]

最后,我们使用 lambda +列表理解来显示表 10。这种组合对于在更少的代码行中获得复杂问题的高效解决方案非常有用。

列表理解中的条件句

我们还可以在列表理解中添加条件语句。我们可以使用 range()、 运算符等创建列表。cal 还使用 if 语句对列表应用了一些条件。

以下是一些描述使用列表理解而不是传统方法来迭代 iterables 的例子:

示例 1: 显示从 1 到 10 的数字的平方。

蟒蛇 3

# Getting square of even numbers from 1 to 10
squares = [n**2 for n in range(1, 11) if n%2==0]# Display square of even numbers
print(squares)

输出:

[4, 16, 36, 64, 100]

示例 2: 显示随机数列表中的偶数元素。

蟒蛇 3

# Assign matrix
twoDMatrix = [[10, 20, 30],[40, 50, 60],[70, 80, 90]]# Generate transpose
trans = [[i[j] for i in twoDMatrix] for j in range(len(twoDMatrix))]print(trans)

输出:

[++++[+10, 40, 70], [20, 50, 80], [30, 60, 90]]

示例 3: 切换字符串中每个字符的大小写。

蟒蛇 3

# Initializing string
string = 'Geeks4Geeks'# Toggle case of each character
List = list(map(lambda i: chr(ord(i)^32), string))# Display list
print(List)

输出:

[‘g ‘,’ E ‘,’ E ‘,’ K ‘,’ S ‘,’ \x14 ‘,’ g ‘,’ E ‘,’ E ‘,’ K ‘,’ S ‘,’ \x01’]

示例 4: 反转元组中的每个字符串。

蟒蛇 3

# Reverse each string in tuple
List = [string[::-1] for string in ('Geeks', 'for', 'Geeks')]# Display list
print(List)

输出:

['skeeG', 'rof', 'skeeG']

例 5: 显示列表中所有奇数元素的位数之和。

蟒蛇 3

# Explicit function
def digitSum(n):dsum = 0for ele in str(n):dsum += int(ele)return dsum# Initializing list
List = [367, 111, 562, 945, 6726, 873]# Using the function on odd elements of the list
newList = [digitSum(i) for i in List if i & 1]# Displaying new list
print(newList)

输出:

[16, 3, 18, 18]

要点

  • 对列表的理解是基于当前列表描述和构建列表的有效手段。
  • 一般来说,列表理解比标准的列表形成函数和循环更轻量级和简单。
  • 为了确保用户友好的代码,我们不应该为列表理解编写长代码。
  • 列表的每个理解都可以在 for 循环中重写,但是在列表解释的上下文中,每个 for 循环都不能重写。

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

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

相关文章

【Python】利用Python+thinker实现旋转转盘

需求/目的:用Pythonthinker实现转盘,并且能够随机旋转任意角度。 转盘形式: 主界面: from tkinter import *winTk() win.title("大转盘") win.geometry("300x400")win.mainloop() 转盘绘制: 这…

USMART调试组件学习

USMART调试组件学习日记 写于2024/9/24日晚 文章目录 USMART调试组件学习日记1. 简介2. 调试组件组成3.程序流程图4. 移植解析5. 实验效果5. 实验效果 1. 简介 USMART 是由正点原子开发的一个灵巧的串口调试互交组件,通过它你可以通过串口助手调用程序里面的任何函…

SigLIP技术小结

paperhttps://arxiv.org/abs/2303.15343githubhttps://github.com/google-research/big_vision个人博客位置http://myhz0606.com/article/siglip 1 背景 CLIP[1]自提出以来在zero-shot分类、跨模态搜索、多模态对齐等多个领域得到广泛应用。得益于其令人惊叹的能力&#xff0…

备考中考的制胜法宝 —— 全国历年中考真题试卷大全

在中考这场重要的战役中,每一分都至关重要。为了帮助广大考生更好地备考,我们精心整理了这份全国历年中考真题试卷大全,旨在为大家提供最全面、最权威的备考资料。 文章目录 1. 全科覆盖,无遗漏2. 历年真题,权威可靠3.…

数据结构——“AVL树”的四种数据旋转的方法

因为上次普通的二叉搜索树在极端情况下极容易造成我们的链式结构(这会导致我们查询的时间复杂度变为O(n)),然而AVL树就很好的解决了这一问题(归功于四种旋转的方法),它让我们的树的查询的时间复杂度变得接近…

QT--基础

将默认提供的程序都注释上意义 0101.pro QT core gui #QT表示要引入的类库 core:核心库 gui:图形化界面库 #如果要使用其他库类中的相关函数,则需要加对应的库类后,才能使用 greaterThan(QT_MAJOR_VERSION, 4): QT wid…

关于frp Web界面-----frp Server Dashboard 和 frp Client Admin UI

Web 界面 官方文档:https://gofrp.org/zh-cn/docs/features/common/ui/ 目前 frpc 和 frps 分别内置了相应的 Web 界面方便用户使用。 客户端 Admin UI 服务端 Dashboard 服务端 Dashboard 服务端 Dashboard 使用户可以通过浏览器查看 frp 的状态以及代理统计信…

GD32片内flash读写数据

如有技术问题及技术需求请加作者微信! GD32片内Flash的读写数据是微控制器编程中的常见任务,主要用于存储程序代码、配置参数或用户数据等。以下将详细介绍GD32片内Flash的读写数据方法和程序。 一、GD32 Flash的基本特性 存储空间划分:GD32的Flash存储空间通常分为主存储块…

罕见 P0 故障!上交所崩了 ~

大家好啊,我是董董灿。 昨天(9月27号)很多朋友可能都刷到一个消息:上交所崩了。 原因是在近期经济政策的刺激下,我大A股市场出现反弹,很多投资者纷纷涌入大A进行交易。 A 股反弹本来是件好事&#xff0c…

常见网络服务搭建之SSH服务搭建

SSH为Secure Shell的缩写,由IETF的网络小组(Network Working Group)所制定的建立在应用层基础上的安全协议。SSH是较可靠,专为远程登录会话和其他网络服务提供安全性的协议,利用SSH协议可以有效防止远程管理过程中的信…

计算机毕业设计 招生宣传管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

代码随想录算法训练营第十七天|654.最大二叉树 617.合并二叉树 700.二叉搜索树中的搜索 98.验证二叉搜索树

654.最大二叉树 给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下: 二叉树的根是数组中的最大元素。左子树是通过数组中最大值左边部分构造出的最大二叉树。右子树是通过数组中最大值右边部分构造出的最大二叉树。 通过给定的数组构建最大二…

番外篇 | 复现AC-YOLOv5,进行自动化织物缺陷检测

前言:Hello大家好,我是小哥谈。我们提出了一种基于AC-YOLOv5的新型纺织缺陷检测方法。将空洞空间金字塔池化(ASPP)模块引入YOLOv5主干网络中,提出了squeeze-and-excitation(CSE)通道注意力模块,并将其引入到YOLOv5主干网络中。🌈 目录 🚀1.基础概念 🚀2.添…

Chrome浏览器如何修改语言(修改成英文、中文)

一、背景 有的时候需要修改chrome浏览器的语言,比如如下是中文,我要修改成英文 二、下面的方法已经无效了 在语言里添加"英语"并且置顶,试了很久,设置完后重启浏览器什么的,都无法改成英文。 这个可能…

ECMAScript 与 JavaScript 的区别详解

ECMAScript 与 JavaScript 的区别详解 在前端开发的学习过程中,很多开发者会遇到两个常见的术语:ECMAScript 和 JavaScript。这两个术语常常被混淆,因为它们密切相关,甚至有时被认为是同一件事。本文将详细解析 ECMAScript 和 Ja…

青动CRM V3.2.1

全面解决企业销售团队的全流程客户服务难题旨在助力企业销售全流程精细化、数字化管理,全面解决企业销售团队的全流程客户服务难题,帮助企业有效盘活客户资源、量化销售行为,合理配置资源、建立科学销售体系,提升销售业绩。标准授…

【面试题】软件测试实习(含答案)

软件测试实习常见面试题,主要是功能测试相关的基础问题 目录 一、软件测试基础 1、介绍一下你最近的项目,以及工作职责 2、软件项目的测试流程? 3、黑盒测试与白盒测试的区别? 4、黑盒测试常见的设计方法?怎么理解等价类方法和边界值方法 1&…

言语理解(2)

B B出现在文章中的第一句话,属于转折前的内容非重点 在这一过程中,属于对前面的指代,后面可以引出文章中的中心内容 A D没有提及到农村,C选项和文段中的最后一句话是相契合的 B 色彩是文章中的主题词,不过属于转折&…

SpringBoot搭建

第一种创建方式 第二种创建方式 第三种创建 第四种手动创建 最后把controller写好

解决Windows远程桌面 “为安全考虑,已锁定该用户账户,原因是登录尝试或密码更改尝试过多,请稍后片刻再重试,或与系统管理员或技术支持联系“问题

根本原因就是当前主机被通过远程桌面输入了过多的错误密码,被系统锁定。这种情况多数是你的服务器远程桌面被人试图攻击了,不建议取消系统锁定策略。如果阿里云或者腾讯云主机,只需要在管理后台通过管理终端或者VNC登陆一次,锁定即…