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]

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

###复杂的列表解析式
#写法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/

你可能感兴趣的:(python解析式与生成器)