python 中的列表解析和生成表达式

Transformer | DETR目标检测中的位置编码position_encoding代码详解 Transformer不像RNN可以根据位置顺序接受和处理单词,所以为了得到词的位置信息,将位置信息添加到每个词的嵌入向量中,这称为位置编码。DETR中提供了两种编码方式,一种是正弦编码(PositionEmbeddingSine),一种是可以学习的编码(PositionEmbeddingLearned),默认为正弦编码。 阅读详情

转自:http://www.cnblogs.com/moinmoin/

优雅、清晰和务实都是python的核心价值观,如果想通过操作和处理一个序列(或其他的可迭代对象)来创建一个新的列表时可以使用列表解析(  List comprehensions)和生成表达式,通过这两个操作,我们可以看到这三个观点是如何在python中和谐统一起来的。

列表解析

在需要改变列表而不是需要新建某列表时,可以使用列表解析。列表解析表达式为:

[expr for iter_var in iterable] 
[expr 
for iter_var in iterable if cond_expr]

第一种语法:首先迭代iterable里所有内容,每一次迭代,都把iterable里相应内容放到iter_var中,再在表达式中应用该iter_var的内容,最后用表达式的计算值生成一个列表。
第二种语法:加入了判断语句,只有满足条件的内容才把iterable里相应内容放到iter_var中,再在表达式中应用该iter_var的内容,最后用表达式的计算值生成一个列表。

举例如下:

>>> L= [(x+1,y+1) for x in range(3) for y in range(5)] 
>>> L
[(
1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (2, 1), (2, 2), (2, 3), (2, 4), (2, 5), (3, 1), (3, 2), (3, 3), (3, 4), (3, 5)]
>>> N=[x+10for x in range(10) if x>5]
>>> N
[
16, 17, 18, 19]
newlist=[x+5for x in olderlist if x>10]

一个更复杂的例子:

 

>>> num = [j for i in range(2, 8) for j in range(i*2, 50, i)]
>>> num
[4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 10, 15, 20, 25, 30, 35, 40, 45, 12, 18, 24, 30, 36, 42, 48, 14, 21, 28, 35, 42, 49]
 
复制代码
>>> words ='The quick brown fox jumps over the lazy dog'.split()
>>> words
[
'The', 'quick', 'brown', 'fox', 'jumps', 'over', 'the', 'lazy', 'dog']
>>> stuff = [[w.upper(), w.lower(), len(w)] for w in words]
>>>for i in stuff:
print i


[
'THE', 'the', 3]
[
'QUICK', 'quick', 5]
[
'BROWN', 'brown', 5]
[
'FOX', 'fox', 3]
[
'JUMPS', 'jumps', 5]
[
'OVER', 'over', 4]
[
'THE', 'the', 3]
[
'LAZY', 'lazy', 4]
[
'DOG', 'dog', 3]

复制代码

上述代码的map()实现:

复制代码
>>> stuff = map(lambda w: [w.upper(), w.lower(), len(w)], words)
>>>for i in stuff:
... 
print i
... 
[
'THE', 'the', 3]
[
'QUICK', 'quick', 5]
[
'BROWN', 'brown', 5]
[
'FOX', 'fox', 3]
[
'JUMPS', 'jumps', 5]
[
'OVER', 'over', 4]
[
'THE', 'the', 3]
[
'LAZY', 'lazy', 4]
[
'DOG', 'dog', 3]
复制代码

生成器表达式

生成器表达式是在python2.4中引入的,当序列过长, 而每次只需要获取一个元素时,应当考虑使用生成器表达式而不是列表解析。生成器表达式的语法和列表解析一样,只不过生成器表达式是被()括起来的,而不是[],如下:

(expr for iter_var in iterable) 
(expr 
for iter_var in iterable if cond_expr)

例:

复制代码
>>> L= (i +1for i in range(10) if i %2)
>>> L
<generator object <genexpr> at 0xb749a52c>
>>> L1=[]
>>>for i in L:
... L1.append(i)
... 
>>> L1
[
2, 4, 6, 8, 10]
复制代码

生成器表达式并不真正创建数字列表, 而是返回一个生成器,这个生成器在每次计算出一个条目后,把这个条目“产生”(yield)出来。 生成器表达式使用了“惰性计算”(lazy evaluation,也有翻译为“延迟求值”,我以为这种按需调用call by need的方式翻译为惰性更好一些),只有在检索时才被赋值( evaluated),所以在列表比较长的情况下使用内存上更有效。A generator object in python is something like a lazy list. The elements are only evaluated as soon as you iterate over them. 

一些说明:

1. 当需要只是执行一个循环的时候尽量使用循环而不是列表解析,这样更符合python提倡的直观性。

for item in sequence:
process(item)

2. 当有内建的操作或者类型能够以更直接的方式实现的,不要使用列表解析。

例如复制一个列表时,使用:L1=list(L)即可,不必使用:

L1=[x for x in L]

3. 当序列过长, 而每次只需要获取一个元素时,使用生成器表达式。

4. 列表解析的性能相比要比map要好,实现相同功能的for循环效率最差(和列表解析相比差两倍)。

5. 列表解析可以转换为 for循环或者使用map(其中可能会用到filter、lambda函数)表达式,但是列表解析更为简单明了,后者会带来更复杂和深层的嵌套。

Python中的列表解析和生成表达式 生成表达式类似于列表解析,但它是惰性计算的,一次只生成一个元素,适用于处理大型数据集。与列表解析不同的是,生成表达式是惰性计算的,它一次只生成一个元素,而不是一次性生成整个列表。在上面的代码中,我们通过列表解析将numbers列表中的每个元素都乘以2,并将结果存储在doubled_numbers列表中。列表解析是一种创建新列表的方式,它通过在方括号内提供一个表达式和一个可迭代对象,快速地生成新的列表。在上面的代码中,我们使用嵌套的列表解析创建了一个3x3的矩阵,其中每个元素的值等于其所在的行号乘以列号。 阅读详情

相关推荐

dert-开源

数据输入和报告工具,此工具类似于DBase,M $ Acces等。 图形界面(Motif / LessTif),DBMS后端包括MySQL,XBase(sourceforge.net/projects/xbase)和mdb-tools(sourceforge.net/projects/mdbtools)。

DETR学习笔记

DETR学习笔记 1.问题 目前的检测方法不是直接预测一个目标的集合,而是使用替代的回归和分类去处理大量的proposals以及anchors。模型的效果会受到一系列问题的影响:后处理去消除大量重叠的预测、anchor的设计、如何把target box与anchor关联起来等问题。 2.解决方案 简化上述流程,将目标检测视为集合预测的方式,好处是训练与预测变成真正的端到端,无需NMS的后处理,十分方便。同时,也不用人为地预设anchor。 3.创新点 a.Set-based的全局loss,使用二分图匹配生成

qq_41439608的博客 4244

(保姆式教程:从下数据到画图)python如何利用EOF分析SSTA海温异常现象并画图

保姆式教程,教你如何利用python分析1979-2004年的太平洋地区的海温异常SSTA,并且绘制出空间模态和时间序列的图片。

shayuxing的博客 2万+

DERT(DEtection TRansformer) ONNX直接推理!!

DETR ONNX模型直接跑!!!

weixin_43999691的博客 3961

Python 使用Pygame库实现足球游戏:创建一个球员和一个足球,并使玩家能够控制球员的移动。游戏将包括碰撞检测、简单的物理模拟,以及基本的用户输入处理

本文将介绍如何使用Python和Pygame库创建一个简单的足球游戏。我们将搭建一个基本的游戏环境,创建一个球员和一个足球,并使玩家能够控制球员的移动。游戏将包括碰撞检测、简单的物理模拟,以及基本的用户输入处理。这个简单的足球游戏展示了Pygame的一些基本功能。虽然这是一个简单的游戏,但它包含了创建游戏循环、用户输入处理、物理模拟、碰撞检测等重要概念。

程序熊的博客 743

离心泵级间导叶的设计计算

离心泵级间导叶的设计计算高速离心泵级间流道的作用是将第一级复合叶轮流出的高速液流收集起来并送入第二级复合叶轮。级间流道的设计应考虑降低液体的流速,实现动能向压力能转化,减小液体的水力损失。级间流道主要有蜗壳形流道和导叶两种结构形...

cqzc55322的博客 2565

PYTHON 列表解析表达式精讲

PYTHON 列表解析表达式精讲前言定义两种常见的格式 前言     列表解析表达式不仅可以简化代码,其也是一种所谓的 “向量化” 操作。在一定程度上,增加了代码的可读性和速度。因此,值得学习!!! 定义     列表解析表达式以中括号 [] 和 if (else) / for 表达式组成,结果产生一个 列表对象 。如果实际操作就很容易理解了。如下: lst = [i for i in range(10)] lst Out[10]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 两种常见的

XIAOFEI@IDO 1188

一分钟了解 Claude Code

在 AI 编程工具百花齐放的 2026 年,凭借其终端原生、全项目理解、自主执行的核心能力,开辟了全新赛道。它不是要替代你的 IDE 或编辑器,而是成为你最强大的终端扩展,让你在熟悉的环境中,用自然语言驱动开发,专注创意,而非琐事。

h a 6 6 6 c k 为 你解决复杂难题! 2205

python 列表解析格式_Python中的列表解析和生成表达式

优雅、清晰和务实都是python的核心价值观,如果想通过操作和处理一个序列(或其他的可迭代对象)来创建一个新的列表时可以使用列表解析(List comprehensions)和生成表达式,通过这两个操作,我们可以看到这三个观点是如何在python中和谐统一起来的。列表解析在需要改变列表而不是需要新建某列表时,可以使用列表解析。列表解析表达式为:[exprforiter_variniterable]...

weixin_39604598的博客 308

网格质量评价

CFD中评价网格质量的方法

B_etter_Man的博客 1万+

Android功耗系列专题理论之十一:高通QCOM平台待机功耗问题分析方法

本文详细介绍了高通QCOM平台待机功耗问题的分析方法。首先强调测试环境标准化的重要性,包括关闭无线功能、日志记录和非必要传感器。重点分析了硬件连接检查、驱动配置验证、电源管理策略优化等关键步骤。文章详细讲解了射频校准、时钟源/中断分析、子系统状态检查等专业技术方法,并提供了具体的命令行操作示例。此外还介绍了外设拆解、外灌电压测试等硬件排查手段,以及功耗分解板、波形分析等高级诊断技术。最后强调了固件版本验证和环境因素测试的必要性,为工程师提供了系统性的功耗问题排查思路。

771

python的列表表达式_python 中的列表解析和生成表达式

优雅、清晰和务实都是python的核心价值观,如果想通过操作和处理一个序列(或其他的可迭代对象)来创建一个新的列表时可以使用列表解析( List comprehensions)和生成表达式,通过这两个操作,我们可以看到这三个观点是如何在python中和谐统一起来的。列表解析在需要改变列表而不是需要新建某列表时,可以使用列表解析。列表解析表达式为:[exprforiter_variniterable...

weixin_39751327的博客 391

网神 SecGate 3600 防火墙 app_av_import_save文件上传漏洞(含批量验证poc)

网神 SecGate 3600 防火墙 app_av_import_save文件上传漏洞(含批量验证poc)

weixin_43567873的博客 297

python生成表达式_python中的列表解析和生成表达式

列表解析在需要改变列表而不是需要新建某列表时,可以使用列表解析。列表解析表达式为:[expr for iter_var in iterable] [expr for iter_var in iterable if cond_expr]第一种语法:首先迭代iterable里所有内容,每一次迭代,都把iterable里相应内容放到iter_var中,再在表达式中应用该iter_var的内容,最后用表达...

weixin_42516021的博客 203

2026华为OD面试题029:勇攀数字高峰

在给定的数字地形图里寻找登山路径,数字代表当前位置的海拔高度。要求从最低海拔出发,不断攀登,最终到达最高山峰。地图保证最低海拔和最高山峰都只有一个。 登山规则: - 路径上的海拔必须严格递增 - 只能向上下左右 4 个方向移动 - 路径必须从最低海拔开始,到最高海拔结束 - 每个地点只能走一次 - 每一步的攀登高度差必须大于 0,且不超过指定值 `K` 输出满足条件的登山路径的数量。

琅嬛福地 116

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

python中的列表解析和列表生成表达式

Get Starting优雅、清晰和务实都是python的核心价值观,如果想通过操作和处理一个序列(或其他的可迭代对象)来创建一个新的列表时,可以使用列表解析( List comprehensions)和列表生成表达式,通过这两个操作,我们可以看到这三个观点是如何在python中和谐统一起来的。列表解析表达式在需要改变(从一个列表中创建)列表而不是新建某列表时,可以使用列表解析。列表解析表达式为:

春天的道路依然充满泥泞! 821

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

python 表达式解析_python 中的列表解析和生成表达式 - 转

优雅、清晰和务实都是python的核心价值观,如果想通过操作和处理一个序列(或其他的可迭代对象)来创建一个新的列表时可以使用列表解析( List comprehensions)和生成表达式,通过这两个操作,我们可以看到这三个观点是如何在python中和谐统一起来的。列表解析在需要改变列表而不是需要新建某列表时,可以使用列表解析。列表解析表达式为:[exprforiter_variniterable...

weixin_39884373的博客 167

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

浅析Python中的列表解析和生成表达式

优雅、清晰和务实都是python的核心价值观,如果想通过操作和处理一个序列(或其他的可迭代对象)来创建一个新的列表时可以使用列表解析( List comprehensions)和生成表达式,通过这两个操作,我们可以看到这三个观点是如何在python中和谐统一起来的。 列表解析 在需要改变列表而不是需要新建某列表时,可以使用列表解析。列表解析表达式为: [exp

gaoxin12345679的专栏 701

python 中的列表解析和生成器表达式

优雅、清晰和务实都是python的核心价值观,如果想通过操作和处理一个序列(或其他的可迭代对象)来创建一个新的列表时可以使用列表解析( List comprehensions)和生成表达式,通过这两个操作,我们可以看到这三个观点是如何在python中和谐统一起来的。 列表解析  在需要改变列表而不是需要新建某列表时,可以使用列表解析。列表解析表达式为:  [e

pfm685757的专栏 718

Python中的列表解析和生成器表达式

                  Python中的列表解析和生成器表达式                                     作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。     一.列表解析案例 1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 #@author :yinzhengjie 4 #bl...

weixin_34405925的博客 125

【转】python 中的列表解析和生成表达式

原文地址: http://www.jb51.net/article/26520.htm 优雅、清晰和务实都是python的核心价值观,如果想通过操作和处理一个序列(或其他的可迭代对象)来创建一个新的列表时可以使用列表解析( List comprehensions)和生成表达式,通过这两个操作,我们可以看到这三个观点是如何在python中和谐统一起来的。 列表解析 在需要改变列表而...

aiyun1242的博客 136

python算术表达式生成列表_python 中的列表解析和生成表达式 - 转

优雅、清晰和务实都是python的核心价值观,如果想通过操作和处理一个序列(或其他的可迭代对象)来创建一个新的列表时可以使用列表解析( List comprehensions)和生成表达式,通过这两个操作,我们可以看到这三个观点是如何在python中和谐统一起来的。列表解析在需要改变列表而不是需要新建某列表时,可以使用列表解析。列表解析表达式为:[exprforiter_variniterable...

weixin_39686192的博客 400
下一篇: 了解 Avro
heming621
博客等级 码龄15年 9粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值