欢迎光临散文网 会员登陆 & 注册

【经验分享】Python技巧之推导式

2022-07-29 17:07 作者:腾讯蓝鲸智云  | 我要投稿

简介

列表推导式(List Comprehensions)也是来自函数式编程语言,可以优雅的对一个序列进行数据筛选和处理得到一个结果列表。

比如,把一个列表中所有大于 0 的数平方后生产一个新的列表。


num = [-2, 3, 5, -4, 10, 7]


按常规做法,我们会


num = [-2, 3, 5, -4, 10, 7]

result = []

for x in num:

if x > 0:

result.append(x**2)

print result


然后,用列表推导式的话,只需要


print [x**2 for x in num if x > 0]




组成

怎么解读这个式子呢?


把这个式子分成三个部分:输出处理、for循环、if判断。其中if判断部分是可选的。

if 判断部分是用来筛选。

输出处理部分比较灵活,随便自己想怎么处理。

比如有个列表A = [‘1’, ‘2’, ‘3’],我们可以[int(x) for x in A],把列表所有元素转换成int类型。

上面是最基本的形式了。还有一些稍微复杂的形式,怎么解读呢?

方法

方法是,除开“输出处理”部分,其它都是按从左到右顺序来的。

1)多个for循环


[(x, y) for x in range(3) for y in range(5)]


在这里,处理部分是(x, y),其它按从左到右。等价于


for x in range(3):

for y in range(5):

#处理部分


2)嵌套列表推导式


[[0 for y in range(3)] for x in range(5)]


在这里,处理部分是[0 for y in range(3)],其它按从左到右。等价于


for x in range(5):

#处理部分


3)多个if判断


[(x, y) for x in range(3) if x>1 for y in range(5) if y>2]


在这里,处理部分是(x, y),其它按从左到右。等价于


for x in range(3):

if x>1:

for y in range(5):

if y>2:

#处理部分




拓展

1)其他推导式

除了列表推导式。还有生成器推导式、集合推导式(python2.7及以上)、字典推导式(python2.7及以上)。


[x for x in range(3)] #-> 列表推导式

(x for x in range(3)) #-> 生成器推导式

{x for x in range(3)} #-> 集合推导式

{x:None for x in range(3)} #-> 字典推导式


比如


>>> d = {'a':1, 'b':2, 'c':3}

>>> d2 = {v:k for k,v in d.items()}#反向映射

>>> d2

{1: 'a', 2: 'b', 3: 'c'}

>>> d3 = {k:v.upper() for k,v in d2.items()}#把所有值都大写

>>> d3

{1: 'A', 2: 'B', 3: 'C'}


2)Python3 base64编码与解码

在蓝鲸项目中,部分接口的报文是通过base64加密传输的,所以在进行接口自动化时,需要对所传的参数进行base64编码,对拿到的响应报文进行解码;

例如:作业平台的fast_execute_script(快速执行脚本)的script_content

python3.x 中字符都为unicode编码,而b64encode函数的参数为byte类型,所以必须先转码。


import base64

# encode 编码

# decode 解码

s ='adsvsdega15s1dasda'

encodestr = base64.b64encode(s.encode('utf-8'))

print(encodestr)

# b'YWRzdnNkZWdhMTVzMWRhc2Rh'

print(str(encodestr, 'utf-8'))

# YWRzdnNkZWdhMTVzMWRhc2Rh


decodestr = base64.b64decode(encodestr)

print(decodestr)

# b'adsvsdega15s1dasda'

print(str(decodestr, 'utf-8'))

# adsvsdega15s1dasda


蓝鲸智云

本文由腾讯蓝鲸智云编辑发布,腾讯蓝鲸智云(简称蓝鲸)软件体系是一套基于PaaS的技术解决方案,致力于打造行业领先的一站式自动化运维平台。目前已经推出社区版、企业版,欢迎体验。

- 官网:https://bk.tencent.com/

- 下载链接:https://bk.tencent.com/download/

- 社区:https://bk.tencent.com/s-mart/community/question


【经验分享】Python技巧之推导式的评论 (共 条)

分享到微博请遵守国家法律