简介
列表推导式(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的技术解决方案,致力于打造行业领先的一站式自动化运维平台。目前已经推出社区版、企业版,欢迎体验。