Python从题目中学习:List comprehension
九九乘法表作业其实有更简单的做法,就是用列表推导式。
-----------------------------------------------------------------------------
Print below multiplication table: 1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4=8 3*4=12 4*4=16 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81 --------------------------------------------------------------------------------------------1.列表推导式书写形式:
[表达式 for 变量 in 列表] 或者 [表达式 for 变量 in 列表 if 条件]
2.介绍:
列表推导式是利用其他列表创建新列表的一种方法,它的工作方式类似于for循环。
简单理解就是 可以直接通过for循环生成一个list列表。
3.举例:
list = [1,2,3,4,5,6,7,8,9] #打印列表中 所有元素的平方
print [x**2 for x in list]
#[1, 4, 9, 16, 25, 36, 49, 64, 81] #打印列表中 大于5的元素的平方 (只需要添加if语句即可)
print [x**2 for x in list if x>5]
#[36, 49, 64, 81] #打印列表中 所有元素和元素*10组成的元祖
print [(x,x*10) for x in list]
#[(1, 10), (2, 20), (3, 30), (4, 40), (5, 50), (6, 60), (7, 70), (8, 80), (9, 90)] #也可以在添加多个for循环
print [(x,y) for x in range(3) for y in range(3)]
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
print [[x,y] for x in range(3) for y in range(3)]
[[0, 0], [0, 1], [0, 2], [1, 0], [1, 1], [1, 2], [2, 0], [2, 1], [2, 2]] #当然,添加多个if循环也可以
[(x, y) for x in range(10) if x % 2 if x > 3 for y in range(10) if y > 7 if y != 8]
#[(5, 9), (7, 9), (9, 9)]
list1 = [2,4,6]
list2 = [3,6,9]
[list1[i]+list2[2] for i in range(len(list1))]
#[11, 13, 15]
4.题目做法:
>>> print "\n".join([" ".join(["%d*%d=%d"%(secondNum,firstNum,firstNum*secondNum) for secondNum in range(1,firstNum+1)]) for firstNum in range(1,10)])
#1*1=1
#1*2=2 2*2=4
#1*3=3 2*3=6 3*3=9
#1*4=4 2*4=8 3*4=12 4*4=16
#1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
#1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
#1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
#1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
#1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
如果想了解list comprehension原理的东西,这个人文章写得很清楚:http://blog.chinaunix.net/uid-28631822-id-3488324.html
5.实践:
在来一道题,摘自《Python基础教程》:
>>> girls = ['alice','bernice','clarice']
>>> boys = ['chris','arnold','bob']
>>> [b+'+'+g for b in boys for g in girls if b[0]==g[0]]
['chris+clarice', 'arnold+alice', 'bob+bernice']
#当然这样也可以,脑子不要不转圈
>>> [(b,g) for b in boys for g in girls if b[0]==g[0]]
[('chris', 'clarice'), ('arnold', 'alice'), ('bob', 'bernice')]
书上还提供了一种更优的方案:
>>> for girl in girls:
letterGirls.setdefault(girl[0],[]).append(girl)
>>> [b+'+'+g for b in boys for g in letterGirls[b[0]]]
#['chris+clarice', 'chris+clarice', 'arnold+alice', 'arnold+alice', 'bob+bernice', 'bob+bernice'] #解释一下:
#letterGirls.setdefault(girl[0],[]) 之后
>>> print letterGirls
#{'a': [], 'c': [], 'b': []} #letterGirls.setdefault(girl[0],[]).append(girl)之后
>>> letterGirls
{'a': ['alice'], 'c': ['clarice'], 'b': ['bernice']} #for循环遍历字典,得到的是key值
#setdefault(key,value),如果没有value值就更新,有的话就不更新值。
Python从题目中学习:List comprehension的更多相关文章
- Python从题目中学习:range()和xrange()
近期给公司培训Python,好好啃了啃书本,查了查资料,总结一些知识点. --------------------------------------------------------------- ...
- Python从题目中学习:random() module
最近在给公司培训Python,布置了一道题: ----------------------------------------------------------------------------- ...
- 从题目中学习java语法
一.输入输出 1.输入圆的半径,计算并输出圆的周长和面积: import java.util.Scanner; public class zuoye01_circle { public static ...
- 4.《python自省指南》学习
前言 前面几篇博客我都是通过python自省来分析代码并试图得出结论.当然,仅仅通过自省能解决的问题有限,但遇到问题还是不自主的去用这个功能,觉得对于认识代码的含义还是有一定帮助的.而这些自省的知 ...
- python中学习K-Means和图片压缩
python中学习K-Means和图片压缩 大家在学习python中,经常会使用到K-Means和图片压缩的,我们在此给大家分享一下K-Means和图片压缩的方法和原理,喜欢的朋友收藏一下吧. 通俗的 ...
- 从watevrCTF-2019:Pickle Store中学习python之pickle序列化漏洞
从watevrCTF-2019:Pickle Store中学习python之pickle序列化漏洞 pickle提供了一个简单的持久化功能.可以将对象以文件的形式存放在磁盘上. 其本质是Picklin ...
- 在学习python的过程中,遇到的最大的困难是什么?
本人文科生,回顾自己近 2 年的Python 自学经历,有一些学习心得和避坑经验分享给大家,让大家在学习 Python 的过程中少走一些弯路!减少遇到不必要的学习困难! 首先,最开始最大的困难应该就是 ...
- (数据科学学习手札22)主成分分析法在Python与R中的基本功能实现
上一篇中我们详细介绍推导了主成分分析法的原理,并基于Python通过自编函数实现了挑选主成分的过程,而在Python与R中都有比较成熟的主成分分析函数,本篇我们就对这些方法进行介绍: R 在R的基础函 ...
- Python html.parser库学习小结
分类路径:/Datazen/DataMining/Crawler/ 前段时间,一朋友让我做个小脚本,抓一下某C2C商城上竞争对手的销售/价格数据,好让他可以实时调整自己的营销策略.自己之前也有过写 ...
随机推荐
- [转]解决ubuntu下面putty不能连接RS232串口(USB2COM线)
http://m.blog.csdn.net/blog/wuyanrobert_tjsd/33045255 最后还是sudo了,感觉注销后没有加入dialout组
- .NET笔试题集(一)
1.简述 private. protected. public. internal.protected internal 访问修饰符和访问权限 private : 私有成员, 在类的内部才可以访问. ...
- WCF 断点不会命中
VS的调试模式改为Debug 工具—选项—调试—常规中的‘要求源文件和原始版本完全匹配’的勾去掉
- rails之 Migrations (转)
1.简介 在rails中用migration可以很方便的管理数据库的结构.可以创建数据库,创建表,删除表,添加字段,删除字段,整理数据. migration就是一系列的class,这些类都继承了Act ...
- 小议安卓定位伪造-实战足不出户畅玩Pokemon Go
本文旨在技术探讨故本文不提供工具,正常玩家请勿模仿,游戏中虚拟位置有封号风险 0x00 安卓定位方式归类 要伪造定位首先要摸清定位到底是如何实现的,首先从广义上来区分安卓的定位方式实际上就gps和ne ...
- 视频转gif
如何把视频变成GIF https://shop16541393.koudaitong.com/v2/feature/1x6q09fa?openid=ov0dfwb6-DBFqTzvekSNAjT59U ...
- WAMPSERVER 与 IIS冲突 及如何修改网站根目录
如果之前打开过IIS服务或者用过xampp则输入localhost时,浏览器显示如下: 这说明WAMPSERVER 与 IIS服务的默认端口冲突: 可以测试80端口是否被占用: 如上端口被IIS服务占 ...
- 强大的wget
转载自:http://www.cnblogs.com/lidp/archive/2010/03/02/1696447.html 需要下载某个目录下面的所有文件.命令如下 wget -c -r -np ...
- UVA340 猜数字游戏
一个经典的找数字位置正确并且找到正确数列中存在的数字而错误的序列存在但是不是正确位置的算法. 看似很难的算法,但是lrj却很简单解决. #include<cstdio> #define M ...
- Struts2 Action中的方法命名不要以get开头
偶然发现,在调用一个action中的某个方法时,会自动调用另一个无关的方法,找了好久,最后发现是方法命名的问题,方法命名以get开头,action会自动调用!所以,以后再写action中的方法时尽量不 ...