【廖雪峰python入门笔记】列表生成式

《廖雪峰python3教程》| 书评 + 学习笔记干货 如果你正在考虑自己适不适合读《廖雪峰python3教程》,不妨看看我的评价~ 我把知识盲点整理成了一份清单,你可以自测,然后参考我的学习笔记哦~ 阅读详情

1. 生成列表

要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],我们可以用range(1, 11):

>>> range(1, 11)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

但如果要生成[1x1, 2x2, 3x3, …, 10x10]怎么做?方法一是循环:

>>> L = []
>>> for x in range(1, 11):
...    L.append(x * x)
... 
>>> L
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

但是循环太繁琐,而列表生成式则可以用一行语句代替循环生成上面的list:

>>> [x * x for x in range(1, 11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

这种写法就是Python特有的列表生成式。利用列表生成式,可以以非常简洁的代码生成 list。

写列表生成式时,把要生成的元素x * x放到前面,后面跟for 循环,就可以把list创建出来,十分有用,多写几次,很快就可以熟悉这种语法。

2. 复杂表达式

使用for循环的迭代不仅可以迭代普通的list,还可以迭代dict。

假设有如下的dict:

d = { ‘Adam’: 95, ‘Lisa’: 85, ‘Bart’: 59 }

完全可以通过一个复杂的列表生成式把它变成一个 HTML 表格:

tds = ['<tr><td>%s</td><td>%s</td></tr>' % (name, score) for name, score in d.iteritems()]
print '<table>'
print '<tr><th>Name</th><th>Score</th><tr>'
print '\n'.join(tds)
print '</table>'

注:字符串可以通过 %进行格式化,用指定的参数替代 %s。字符串的join()方法可以把一个 list 拼接成一个字符串。

把打印出来的结果保存为一个html文件,就可以在浏览器中看到效果了:

<table border="1">
<th>Name</th><th>Score</th><tr>
<tr><td>Lisa</td><td>85</td></tr>
<tr><td>Adam</td><td>95</td></tr>
<tr><td>Bart</td><td>59</td></tr>
</table>
NameScore
Lisa85
Adam95
Bart59

3.条件过滤

列表生成式的 for 循环后面还可以加上 if 判断。例如:

>>> [x * x for x in range(1, 11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

如果我们只想要偶数的平方,不改动 range()的情况下,可以加上 if 来筛选:

>>> [x * x for x in range(1, 11) if x % 2 == 0]
[4, 16, 36, 64, 100]

有了 if 条件,只有 if 判断为 True 的时候,才把循环的当前元素添加到列表中。

实例
请编写一个函数,它接受一个 list,然后把list中的所有字符串变成大写后返回,非字符串元素将被忽略。

提示:
1. isinstance(x, str) 可以判断变量 x 是否是字符串;
2. 字符串的 upper() 方法可以返回大写的字母。

def toUppers(L):
    return [i.upper() for i in L if isinstance(i,str)]
print toUppers(['Hello', 'world', 101])

4.多层表达式

for循环可以嵌套,因此,在列表生成式中,也可以用多层 for 循环来生成列表。

对于字符串 ‘ABC’ 和 ‘123’,可以使用两层循环,生成全排列:

>>> [m + n for m in 'ABC' for n in '123']
['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3']

翻译成循环代码就像下面这样:

L = []
for m in 'ABC':
    for n in '123':
        L.append(m + n)

实例
利用 3 层for循环的列表生成式,找出对称的 3 位数。例如,121 就是对称数,因为从右到左倒过来还是 121。

print [i*100+j*10+k for i in range(1,10) for j in range(10) for k in  range(10) if i==k]
爬虫:将廖雪峰网上资源保存为本地PDF文件 偶然中看到[Python之禅]的推文,关注公众号之后,发现里面好多有趣的东西,于是按照作者的讲解,打算自己亲自去试一试! 爬虫:将廖雪峰网上资源保存为本地PDF文件1. 准备工作:1.1 分析网站结构: 阅读详情

相关推荐

【廖雪峰Python教程】一、python基础

廖雪峰python教程第一章内容及易错点总结❀

学习,学无止境 3004

python学习 廖雪峰老师 --(列表生成式)

列表生成式即List Comprehensions,是Python内置的可以用来创建list的生成式。 Exm:要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用list(range(1, 11)): Exm:要生成[1x1, 2x2, 3x3, …, 10x10]同样可以用 [x * x for x in range(1, 11)] [1, 4, 9,...

sinat_41737742的博客 307

这篇博客记录廖雪峰python教程的习题(一)

函数 函数的参数 “以下函数允许计算两个数的乘积,请稍加改造,变成可接收一个或多个数并计算乘积: def product(x,y): return x*y 由于是可以接收一个或多个参数,所以想到定义函数时要用可变参数 def product(*numbers): #这个地方*numbers就是可变参数,函数内部numbers其实是作为一个tuple sum=1

柠檬黄先生的博客 1万+

python--列表生成式--8

原创博文,转载请标明出处--周学伟http://www.cnblogs.com/zxouxuewei/   一.生成列表 要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],我们可以用range(1, 11): &gt;&gt;&gt; range(1, 11) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 但如果要生成[1x1...

weixin_34038652的博客 200

【Python3.6】:廖雪峰python教程转换成 PDF

廖雪峰python教程转换成 PDF

AI-Echo的博客 6163

Python入门书籍推荐

许多刚入门Python选手,由于缺乏指导,导致往往培养不出爱好最后放弃 作为一个自学新手,我想将我要推荐的书籍介绍出来,来帮助类似像我一样的其他新手。 希望有用(仅仅是推荐书,不夹带任何私货,如有侵犯您的权益,私信我删除。 入门: 1.《A byte-of-python》 中文名:简明python教程 入门的书很多,但能让新手轻松看懂的就少了,作者写的思路非常清晰,对每一个知识点讲解的很到位,不多不少,对初学者来说,力道刚刚好。 我认为这本书是Python入门最好的书...

m0_65538794的博客 4284

廖雪峰Python列表生成式

L1 = [‘Hello’, ‘World’, 18, ‘Apple’, None] 现在把L1里的str改为小写: ①如果删除非str内容:[ x.lower() for x in L1] ②如果不想改变L1内容:[x.lower if isinstance(x,str) else x for x in L1] 对第二句,断句理解应该是这样的:x.lower if isinstance(x,st...

zhuazengbian9095的博客 380

【廖雪峰python教程学习】——(一)python基础

数据类型和变量 Python还允许用r’’’'表示内部的字符串默认不转义 如果字符串内部既包含’又包含" 可以用转义字符\来标识 Python允许用’’’ … ‘’'的格式表示多行内容 在Python中赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量[动态语言] [静态语言:Java…]在定义变量时必须指定变量类型,如果赋值的时候类型不匹配,就会报错 在Python中,通常用全部大写的变量名表示常量 print(*objects, sep=' ', end

msmxsd的博客 5177

廖雪峰官网 python 列表生成式小结

思考:如果list中既包含字符串,又包含整数,由于非字符串类型没有lower()方法,所以列表生成式会报错: L = [‘Hello’, ‘World’, 18, ‘Apple’, None] 简洁答案:[s.lower() if isinstance(s,str) else s for s in L]

泛白小筑 541

Python廖雪峰经典手册完整学习指南

Python是一种高级、解释型编程语言,以可读性强、语法简洁著称。其动态类型系统和丰富的标准库使其在Web开发、自动化运维、数据科学和人工智能等领域广泛应用。作为胶水语言,Python支持多种编程范式,包括面向对象、函数式与过程式编程,具备良好的可扩展性。变量是程序中用于存储数据的命名容器。与静态类型语言不同,Python中的变量无需显式声明类型,其类型由赋值时的对象决定,这种机制称为“动态绑定”。理解变量的创建、引用和生命周期,是掌握Python编程的第一步。

weixin_36282234的博客 1289

SQL实现数据仓库ETL:分层设计、增量抽取与性能优化实践

在数据仓库建设过程中,ETL(抽取、转换、加载)是数据流转的核心环节。传统观点常将ETL与专业工具或大数据框架绑定,但在中小规模数据场景下,基于SQL的ETL方案凭借低门槛、高可维护性和直观的排错体验,成为高效且务实的选择。本文从ETL的基础概念出发,阐述数据仓库分层(ODS、DWD、DWS、ADS)中每层ETL的定位与职责,重点剖析增量抽取策略(时间戳、主键、日志)下的SQL实现方式,以及数据清洗、去重和格式化的常见写法。同时,结合真实项目经验,分享慢SQL优化技巧、任务调度依赖设计、幂等性保障和常见问题

weixin_33290540的博客 346

列表生成式和列表生成器

一、列表生成式 列表生成式是快速生成一个列表的一些公式 numbers = [] for x in range(0,101): numbers.append(x) print(numbers) [要放入列表的数据 简单的表达式1 表达式2] x for x in range(0,101) for循环遍历出来的值,放入列表中 numbers =[x for x i...

hellocsz的博客 3852

数字逻辑设计大程——以撒的结合(Verilog语言)

前言 在大二学习数字逻辑设计课程(即计算机组成课程的前引课)时,期末大程题目我和同组的github成员lwaekfjlk 决定写一款基于Verilog语言的游戏。原型是我们两人都非常喜爱的一款游戏——The Binding of Isaac: Rebirth。在三天三夜的奋战后,基本完成了预期目标。由于亲自编写了其中种种,我们深知新手初期使用Verilog语言有多困难。而可悲的是,这又是之后计算机组成课程和体系结构课程所需的!因此,我们将top部分源码放在这里,供同袍们参考。若想引用还请注明出处。 代码部分

LuvLucifer的博客 1385

看廖雪峰python学习笔记和自己查的关于python的笔记

这次学习python是在学过用过python很久之后二刷学习教程,看的是廖雪峰2.7,确实重复的学习还是不断的有收获,接下来记录一些新学到的知识点 list中有insert函数,可以直接在指定位置插入 &gt;&gt;&gt; classmates ['Michael', 'Bob', 'Tracy', 'Adam'] &gt;&gt;&gt; classmates.insert(1, 'J...

weixin_38104825的博客 1067

晶振(晶体振荡器)测试方法详解

晶振测试方法分为无源和有源两种类型。无源晶振(两脚)需用示波器测试波形,重点关注正弦波形状、200mV-1.5Vpp幅值和频率精度;有源晶振(四脚)通电后直接输出方波。测试要点包括:示波器使用10X探头、AC耦合,带宽需5倍于晶振频率;万用表可初筛短路/开路;替换法是工程最有效方法。常见故障排查顺序:供电→复位→焊接→型号→负载电容→波形观察→更换晶振→MCU配置。负载电容需按公式计算匹配,示波器观察是核心测试手段。

jiujiujinyuxi的博客 926

硬件基础——mos管

文章目录前言一、寄生参数二、使用步骤1.引入库2.读入数据总结 前言 MOS管设计重点 一、寄生参数 1.寄生电容 mos管有寄生电容Cgs,此电容大小一般为pF级别,一般规格书可以查到。 使用时,要特别注意GS管教的寄生电容Cgs,控制MOS管的导通与截止,本质上是控制Cgs电容的充放电。(最好要加限流) 二、使用步骤 1.引入库 代码如下(示例): import numpy as np import pandas as pd import matplotlib.pyplot as plt imp

Malqaq的博客 6599

Python初级教程-廖雪峰Python教程

输入输出\布尔变量\变量\字符串格式化\列表\元组\条件判断\for循环\字典与集合\可变对象与不可变对象\内置函数\定义函数与isinstance\默认参数\默认参数必须指向不可变对象\可变参数\关键字参数与命名关键字参数\函数参数顺序\random常见函数\切片\可迭代对象Iterable\列表生成式\生成器\迭代器\map与reduce函数\filter函数\sorted函数\匿名函数lambda\类和实例\数据封装\访问限制\继承与多态

None 4997

VxWorks环境搭建与学习:vxworks6.8和workbench3.2

VxWorks操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(RTOS),是嵌入式开发环境的关键组成部分。良好的持续能力、高性能的内核以及友好的用户开发环境,在嵌入式实时操作系统领域占据一席之地。它以其良好的可靠性和卓越的实时性被广泛地应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中,如卫星通讯、军事演习、弹道制导、飞机导航等。

qq_41854911的博客 8469

【廖雪峰Python教程】三、高级特性

第三章知识点整理及对比归纳。重点提炼:①了解切片左闭右开及反向取数用法②列表生成式和字典推导式的公式背熟,在刷题时有用③理清生成器和迭代器区别,面试八股会问。

学习,学无止境 1059

杭电计算机组成原理课程设计-实验七-寄存器堆设计实验

寄存器堆实验实验原理实验内容模块功能说明模块逻辑引脚图寄存器堆模块代码REG模块测试用例REG-ALU测试用例实验结果记录 寄存器堆实验结果及分析ALU_REG运算器模块实验结果及分析探索与思考 实验原理   32×32位的寄存器堆模块示意图如图所示,含有32个寄存器,每个寄存器32位。该寄存器堆具有A和B两个读端口,分别由 5 位的寄存器编号 R_Addr_A 和 R_Addr_B 来寻址 2 个寄存器,读出的数据则由 R_Data_A(32 位)和R_Data_B(32 位)输出。读访问时,没有使能或者

HDU-整蛊小子-⏰☂️/蚂蚁集团研发工程师 1万+

程序员必备75道逻辑思维题(附答案)之二

逻辑训练 身为一个大数据工程师,平时的算法训练还是不能少的,今天给大家看几道我曾经看到的逻辑思维题觉得很好,想分享一下。 【6】一个球、一把长度大约是球的直径2/3长度的直尺.你怎样测出球的半径?方法很多,看看谁的比较巧妙 【7】五个大小相同的一元人民币硬币。要求两两相接触,应该怎么摆? 【8】猜牌问题 S先生、P先生、Q先生他们知道桌子的抽屉里有16张扑克牌:红桃A、Q、4 黑桃J、8、4、2、...

蛋蛋淡淡定的庄园 3547

廖雪峰python视频教程-廖雪峰python 课程 怎么样!菜鸟教程python

廖雪峰的python教程有一点地方没看明白,求指导题主贴了两数,似乎是一,下面析这一个版本:def?add_end(L=None):if?L?is?None:L?=?[]L.append('END')return?L不题主说的"一直往加END怎么回事。函数里既没有循环也没有递归,怎么会"一直”加。。。关于默认参数,其作用是:使?add_end()的返回值 与?add_end(N...

weixin_37988176的博客 668

SAP ABAP Web Service 的创建与消费:保姆级教程

SOAP 定义了消息的格式和传输规则,使得 Web Service 可以在不同的操作系统和网络环境中通信。通过 WSDL,服务的提供者可以明确地定义服务的功能,而服务的使用者则可以通过解析 WSDL 文件,了解如何正确地调用该服务。它封装了与 Web 服务通信的所有复杂性,如消息格式的构建、传输协议的选择、请求的发送和响应的处理等。除了本文介绍的 ABAP 编程语言之外,我们还可以通过 Java,Node.js,C++,C#,Python 等其他编程语言来消费本文创建的 ABAP Web Service.

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 713

廖雪峰老师——Python入门( 列表生成式 )

生成列表 要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],我们可以用range(1, 11): >>> range(1, 11) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 但如果要生成[1x1, 2x2, 3x3, ..., 10x10]怎么做?方法一是循环: >>> L = [] >>> for x in range(

MADE_Y 654

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

pscad IEEE标准系统搭建说明

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

【廖雪峰Python习题集】列表生成式

如果list中既包含字符串,又包含整数,由于非字符串类型没有lower()方法,所以列表生成式会报错: >>> [s.lower() for s in L] Traceback (most recent call last): File "", line 1, in File "", line 1, in AttributeError: 'int' object has no att

HandSome Girl 1628

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【廖雪峰python入门笔记】dict

1. dict 我们已经知道,list和tuple 可以用来表示顺序集合,例如,班里同学的名字: ['Adam', 'Lisa', 'Bart'] 或者考试的成绩列表: [95, 85, 59] 但是,要根据名字找到对应的成绩,用两个 list 表示就不方便。 如果把名字和分数关联起来,组成类似的查找表: 'Adam' ==&amp;gt; 95 'Lisa' ==&amp;gt; 85 'Bart...

Datawhale 2740

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

上一篇: 【廖雪峰python入门笔记】迭代
下一篇: 【廖雪峰python进阶笔记】函数式编程
Datawhale
Datawhale 领域专家: 物联网技术领域 领域专家: 物联网技术领域
博客等级 码龄8年 8901粉丝 1079原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值