python列表解析

简而言之,列表解析把任意 一个表达式而不是一个函数应用于一个
可迭代对象中的元素

实例引入

Python的内置 ord函数会返回一个单个字符的ASCII整数编码,现在,假设我们希望收集整个字符串中的所有字符的ASCII编码。

1.for循环
也许最直接的方法就是使用一个简单的for循环,并将结果附加在列表中:

res=[]
for x in 'sapm':
    res.append(ord(x))
>>>res
[115, 112, 97, 109)  

2.map函数
再来用map函数试一下,map把一个函数映射遍一个序列并收集结果

>>>res = list(map(ord'spam ' )) 
>>>res 
>[115, 112, 97, 109]

3.列表解析
最后使用列表解析,列表解析把一个表达式映射遍一个序列:

>>>res = [ord(x) for x in 'spam ']
>>>res
> [115, 112, 97, 109) 

列表解析在一个序列的值上应用一个任意表达式,将其结果收集到一个新的列表中并返回。从语法上来说,列·表解析是由方括号封装起来的(为了提醒你它们构造了一个列表)。
下面我们收集了从0~9数字的平方,再来体验一下列表解析

>>>[x**2 for x in range(10)] 
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81) 

增加分支语句和循环

例如,求0~9所有偶数的平方

>>>[ x**2 for x in range(10) if x % 2 == 0]
> [0, 4, 16, 36, 64] 
'''
若在右边的if中得到的是假的话. for循环就
会跳过这些数字,并且用左边的表达式来计算
'''

当for分句嵌套在列表解析中肘, 它们工作起来就像等效的嵌套的for循环语句。例如, 如下代码

>>>res = [x + y for x in [0, 1, 2] for y in [100200300])
>>>res
[100, 200, 300, 101, 201, 301, 102, 202, 302)

与下文如此冗长的代码有相同的效果。
>>>res = []
>>>for x in [0, 1, 2]: 
       for y in [100200300] :
            res.append(x + y) 
>>>res          
[100, 200, 300, 101, 201, 301, 102, 202, 302]

列表解析与矩阵

如下定义了两个矩阵

>>>M= [[1, 2, 3], 
       [4, 5, 6],
       [7, 8, 9]] 
>>>N = [[2, 2, 2],   
        [3, 3, 3],  
        [4, 4, 4]] 
>>>[row[l] for row in M]
[2, 5, 8] 
>>>[M[row][1] for row in (0, 1, 2)]
[2, 5, 8]

复杂点的
>>>[[M[row][col] * N[row][col] for col in range(3)] for row in range(3)]
[[2, 4, 6], [12, 15, 18], [28, 32, 36]]
#row迭代的是外层循环。对于每个row,它运行嵌套的列的选代来创建矩阵每一行的结果
等效代码如下
>>>res = []
>>>for row in range(3):   
       tmp = [] 
       for col in range(3): 
            tmp.append(M[row][col] * N[row][col])
       res.append(tmp)
>>>res  
[[2, 4, 6], [12, 15, 18], [28, 32, 36]]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值