Python基础入门之列表生成式
8.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创建出来,十分有用,多写几次,很快就可以熟悉这种语法。
任务
请利用列表生成式生成列表 [1x2, 3x4, 5x6, 7x8, ..., 99x100]
提示:range(1, 100, 2) 可以生成list [1, 3, 5, 7, 9,...],表示:从1开始到100的范围,不包含100,每隔两个取出第一个值
任务代码:
print [x * (x + 1) for x in range(1,100,2)]
8.2、复杂表达式
(注意:此节需要用之前说过的SublimeText编辑代码,然后存为.py文件,然后终端启动.py文件,将输出的内容,保存为html文件,然后打开,就可以看到效果,不清楚的看最开始的Python入门介绍的文章,效果图:
)
使用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">
<tr><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>
任务
在生成的表格中,对于没有及格的同学,请把分数标记为红色。
提示:红色可以用 <td style="color:red"> 实现。
任务代码:
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
def generate_tr(name, score):
if score < 60:
return '<tr><td>%s</td><td style = "color:red">%s</td></tr>' % (name, score)
else:
return '<tr><td>%s</td><td>%s</td></tr>' % (name, score)
tds = [generate_tr(name,score) for name, score in d.iteritems()]
print '<table border="1">'
print '<tr><th>Name</th><th>Score</th><tr>'
print '\n'.join(tds)
print '</table>'
8.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 [x.upper() for x in L if isinstance(x,str)]
print toUppers(['Hello', 'world', 101])
8.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 [100 * x + 10 * y + z for x in range(1,10) for y in range(10) for z in range(10) if x == z]
Python基础入门之列表生成式相关推荐
- 超全面Python基础入门教程【十天课程】博客笔记汇总表
目录 1.学习地址 2.下载地址[视频.源码.课件.软件] 3.详细博客笔记 Day 01 Day 02 Day 03 Day 04 Day 05 Day 06 Day 07 Day 08 Day 0 ...
- Python基础入门笔记(二)
前言 本文主要为 Python基础入门笔记(一)内容的补充. 一.迭代器和生成器 1.1 Python迭代器 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元 ...
- 万字长文爆肝Python基础入门【巨详细,一学就会】
目录 数据的名字和种类--变量和类型 初探数据种类 数据类型 数值运算 比较运算 变量和赋值 变量的好处 用赋值更新变量 变量和数据类型的关系 总结 数据类型 数值运算 数值比较 变量和赋值 一串数据 ...
- Python基础入门必学内容:判断语句与循环语句
一.if语句 关键字:if.elif.else,写法如下: # if if 条件: # (条件可以是任意表达式)# 条件成立,执行此处代码,条件不成立,跳过此处代码,继续往下执行其他diamante# ...
- Python基础教程:列表(list)切片详细操作
1.正向范围取值 关键点 首位下标是 0 第一个数字是起始下标,第二个数字是结束下标(但最终结果不包含它) 例一: # 正向范围取值 - 字符串 strs ="https://www.bai ...
- [新手必备]Python 基础入门必学知识点笔记
Python 作为近几年越来越流行的语言,吸引了大量的学员开始学习,为了方便新手小白在学习过程中,更加快捷方便的查漏补缺.根据网上各种乱七八糟的资料以及实验楼的 Python 基础内容整理了一份极度适 ...
- Python基础入门6_文件和异常
Python 基础入门前五篇: Python 基础入门–简介和环境配置 Python基础入门_2基础语法和变量类型 Python基础入门_3条件语句和迭代循环 Python基础入门_4函数 Pytho ...
- Python基础入门_3条件语句和迭代循环
Python 基础入门前两篇: Python 基础入门–简介和环境配置 Python基础入门_2基础语法和变量类型 这是第三篇内容,主要简单介绍条件语句和迭代循环语句,内容也比较简单,目录如下: 条件 ...
- Python基础入门_2基础语法和变量类型
Python 基础入门系列第二篇,上一篇简单介绍了为什么用 Python,以及安装和配置环境. 这一篇将先介绍基础的语法,包括标识符,即变量名字,然后 Python 特色的缩进规则,注释.保留字等等, ...
最新文章
- 7. PowerShell -- Provider,数据操作和注册表操作
- mysql8.0 linux安装自启动_Linux系统安装部署MySQL8.0.12特详细教程
- SpringBoot如何返回页面
- [转载] Java中变量与常量
- mysql并行复制降低主从同步延时的思路与启示
- java map操作_Java HashMap的基本操作
- pycharm上python项目的导出_pycharm项目打包成exe
- Python源码深度解析—float类型对象
- 「MYSQL」MYSQL中的int(11)到底代表什么意思?
- 【编译原理】自上而下语法分析(C/C++源码+实验报告)
- Telemetry原理
- linux查看dns命令
- C语言 线性链表 节点的创建、添加和删除
- 【MCU】单片机看门狗工作原理
- could not write file:C:\Users\user\Desktop\KunMing40m\KunMing40m\.classpath
- 项目7 创建与使用触发器
- VirtualBox中重建Host-Only网卡后无法启动虚拟机(VERR_INTNET_FLT_IF_NOT_FOUND)
- 小米手环 android版本区别,小米手环光感版和标准版有什么区别 区别对别分析
- 【蒙古文】:传统蒙古语网页显示方法
- 轮毂要怎么选?选大还是选小?
热门文章
- uniapp h5、app引用外部在线js
- 手工测试2年面临职场危机,3个月进阶自动化测试后,老板终于留我了...
- 年薪50W京东软件测试工程师的成长路 —— 我们都曾一样迷茫
- 会员营销如何提升企业与会员之间的互动频率
- 让猴子游泳,让鸭子爬树
- xpanx原理解析 | 只要 3 秒!抖音视频无水印下载
- Win7安装VS2015报错“安装包丢失或损坏”的解决方法
- css:box-shadow实现单边,多边阴影
- 迅雷下载 HP QTP LR QC AML MyEclipse8.5 Tomcat7地址
- 使用css3 filter属性实现图片毛玻璃效果