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基础入门之列表生成式相关推荐

  1. 超全面Python基础入门教程【十天课程】博客笔记汇总表

    目录 1.学习地址 2.下载地址[视频.源码.课件.软件] 3.详细博客笔记 Day 01 Day 02 Day 03 Day 04 Day 05 Day 06 Day 07 Day 08 Day 0 ...

  2. Python基础入门笔记(二)

    前言 本文主要为 Python基础入门笔记(一)内容的补充. 一.迭代器和生成器 1.1 Python迭代器 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元 ...

  3. 万字长文爆肝Python基础入门【巨详细,一学就会】

    目录 数据的名字和种类--变量和类型 初探数据种类 数据类型 数值运算 比较运算 变量和赋值 变量的好处 用赋值更新变量 变量和数据类型的关系 总结 数据类型 数值运算 数值比较 变量和赋值 一串数据 ...

  4. Python基础入门必学内容:判断语句与循环语句

    一.if语句 关键字:if.elif.else,写法如下: # if if 条件: # (条件可以是任意表达式)# 条件成立,执行此处代码,条件不成立,跳过此处代码,继续往下执行其他diamante# ...

  5. Python基础教程:列表(list)切片详细操作

    1.正向范围取值 关键点 首位下标是 0 第一个数字是起始下标,第二个数字是结束下标(但最终结果不包含它) 例一: # 正向范围取值 - 字符串 strs ="https://www.bai ...

  6. [新手必备]Python 基础入门必学知识点笔记

    Python 作为近几年越来越流行的语言,吸引了大量的学员开始学习,为了方便新手小白在学习过程中,更加快捷方便的查漏补缺.根据网上各种乱七八糟的资料以及实验楼的 Python 基础内容整理了一份极度适 ...

  7. Python基础入门6_文件和异常

    Python 基础入门前五篇: Python 基础入门–简介和环境配置 Python基础入门_2基础语法和变量类型 Python基础入门_3条件语句和迭代循环 Python基础入门_4函数 Pytho ...

  8. Python基础入门_3条件语句和迭代循环

    Python 基础入门前两篇: Python 基础入门–简介和环境配置 Python基础入门_2基础语法和变量类型 这是第三篇内容,主要简单介绍条件语句和迭代循环语句,内容也比较简单,目录如下: 条件 ...

  9. Python基础入门_2基础语法和变量类型

    Python 基础入门系列第二篇,上一篇简单介绍了为什么用 Python,以及安装和配置环境. 这一篇将先介绍基础的语法,包括标识符,即变量名字,然后 Python 特色的缩进规则,注释.保留字等等, ...

最新文章

  1. 7. PowerShell -- Provider,数据操作和注册表操作
  2. mysql8.0 linux安装自启动_Linux系统安装部署MySQL8.0.12特详细教程
  3. SpringBoot如何返回页面
  4. [转载] Java中变量与常量
  5. mysql并行复制降低主从同步延时的思路与启示
  6. java map操作_Java HashMap的基本操作
  7. pycharm上python项目的导出_pycharm项目打包成exe
  8. Python源码深度解析—float类型对象
  9. 「MYSQL」MYSQL中的int(11)到底代表什么意思?
  10. 【编译原理】自上而下语法分析(C/C++源码+实验报告)
  11. Telemetry原理
  12. linux查看dns命令
  13. C语言 线性链表 节点的创建、添加和删除
  14. 【MCU】单片机看门狗工作原理
  15. could not write file:C:\Users\user\Desktop\KunMing40m\KunMing40m\.classpath
  16. 项目7 创建与使用触发器
  17. VirtualBox中重建Host-Only网卡后无法启动虚拟机(VERR_INTNET_FLT_IF_NOT_FOUND)
  18. 小米手环 android版本区别,小米手环光感版和标准版有什么区别 区别对别分析
  19. 【蒙古文】:传统蒙古语网页显示方法
  20. 轮毂要怎么选?选大还是选小?

热门文章

  1. uniapp h5、app引用外部在线js
  2. 手工测试2年面临职场危机,3个月进阶自动化测试后,老板终于留我了...
  3. 年薪50W京东软件测试工程师的成长路 —— 我们都曾一样迷茫
  4. 会员营销如何提升企业与会员之间的互动频率
  5. 让猴子游泳,让鸭子爬树
  6. xpanx原理解析 | 只要 3 秒!抖音视频无水印下载
  7. Win7安装VS2015报错“安装包丢失或损坏”的解决方法
  8. css:box-shadow实现单边,多边阴影
  9. 迅雷下载 HP QTP LR QC AML MyEclipse8.5 Tomcat7地址
  10. 使用css3 filter属性实现图片毛玻璃效果