博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python 入门(十)列表生成式
阅读量:4487 次
发布时间:2019-06-08

本文共 2059 字,大约阅读时间需要 6 分钟。

生成列表

要生成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,...]

 

复杂表达式

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

假设有如下的dict:

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

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

tds = ['%s%s' % (name, score) for name, score in d.iteritems()]print '
'print '
'print '\n'.join(tds)print '
Name Score
'

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

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

Name Score
Lisa 85
Adam 95
Bart 59

任务

在生成的表格中,对于没有及格的同学,请把分数标记为红色。

提示:红色可以用 <td style="color:red"> 实现。

条件过滤

列表生成式的 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() 方法可以返回大写的字母。

 

多层表达式

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。

 

转载于:https://www.cnblogs.com/apple2016/p/5657658.html

你可能感兴趣的文章
MSMQ 消息队列错误处理
查看>>
Prism for WPF 搭建一个简单的模块化开发框架(五)添加聊天、消息模块
查看>>
在VisualStudio 工具箱中隐藏用户控件
查看>>
C#.NET使用Task,await,async,异步执行控件耗时事件(event),不阻塞UI线程和不跨线程执行UI更新,以及其他方式比较...
查看>>
with(nolock) 与 with(readpast) 与不加此2个的区别
查看>>
零元学Expression Blend 4 - Chapter 11 用实例了解布局容器系列-「Border」
查看>>
Bootstrap<基础十> 响应式实用工具
查看>>
SQL Server :理解GAM和SGAM页
查看>>
恢复SQLServer实例连接
查看>>
Oralce 处理字符串函数
查看>>
Flex4 饼图样式(颜色渐变,点击分离,环形)
查看>>
28个Unix/Linux的命令行神器
查看>>
pb11.5破解补丁
查看>>
struts2下 数据转换器
查看>>
比特信 介绍
查看>>
ubuntu 16.04 Samba 匿名配置
查看>>
document handling
查看>>
Spring的核心容器
查看>>
Spoken English Practice(If you fail to do as I say, I will take you suffer.)
查看>>
日志分析方法
查看>>