python解析式与生成器

1,基本语法

列表解析式(list comprehension)
语法:
[返回值 for 元素 in 可迭代对象 if 条件]
返回一个新的列表

l=[(i+1)**2 for i in range(10)] 
# 最外层的括号表示最后展示的数据为一个列表所以用[] 标记。
# 解析式前部分为生成元素部分,后半部分为迭代。
# 不能使用else子句
print(l)
print(type(l))

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
<class 'list'>

使用列表解析式可以大幅提高程序的效率。

###复杂的列表解析式
#写法1:
l1 = [(i,j) for i in range(7) if i>4 for j in range(20,25) if j > 23]
#写法2:
l2 = [(i,j) for i in range(7) for j in range(20,25) if i>4 if j>23]
#写法3:
l3 = [(i,j) for i in range(7) for j in range(20,25) if i>4 and j> 23]
print(l1,l2,l3)   #第三种写法最优。
[(5, 24), (6, 24)] [(5, 24), (6, 24)] [(5, 24), (6, 24)]
2,相关习题
#返回1-10平方的列表
l4 = [i**2 for i in range(1,11)]
print(l4)
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
#有一个列表lst=[1,4,9,16,2,5,10,15],生产一个新的列表,求相邻两项的和。
lst = [1,4,9,16,2,5,10,15]
l5 = [lst[i]+lst[i+1] for i in range(len(lst)-1)]
print(l5)
[5, 13, 25, 18, 7, 15, 25]
#打印九九乘法表
print('\n'.join([''.join(['%sx%s=%-3s' % (x,y,x*y) for x in range(1,y+1)]) for y in range(1,10)]))
1x1=1  
1x2=2  2x2=4  
1x3=3  2x3=6  3x3=9  
1x4=4  2x4=8  3x4=12 4x4=16 
1x5=5  2x5=10 3x5=15 4x5=20 5x5=25 
1x6=6  2x6=12 3x6=18 4x6=24 5x6=30 6x6=36 
1x7=7  2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49 
1x8=8  2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64 
1x9=9  2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81 

更多欢迎访问:http://www.mykernel.cn/

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 标准库 datetime模块 对日期、时间、时间戳的处理 datetime类类方法:today():返回本地时区当...
    vampire6阅读 443评论 0 2
  • 包(lib)、模块(module) 在Python中,存在包和模块两个常见概念。 模块:编写Python代码的py...
    清清子衿木子水心阅读 3,922评论 0 27
  • 个人笔记,方便自己查阅使用 Py.LangSpec.Contents Refs Built-in Closure ...
    freenik阅读 67,953评论 0 5
  • 迭代 如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代...
    Mr_Bluyee阅读 1,446评论 0 1
  • 2017年11月份,湖南初中青年精英教师再次相聚华师。这是精英教师培养第一期的第二阶段,中心任务是进行影子研...
    笨笨鸭阅读 254评论 0 0

友情链接更多精彩内容