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)]))
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
“`

赞 (0)