【經(jīng)驗分享】Python技巧之推導(dǎo)式
簡介
列表推導(dǎo)式(List Comprehensions)也是來自函數(shù)式編程語言,可以優(yōu)雅的對一個序列進行數(shù)據(jù)篩選和處理得到一個結(jié)果列表。
比如,把一個列表中所有大于 0 的數(shù)平方后生產(chǎn)一個新的列表。
num = [-2, 3, 5, -4, 10, 7]
按常規(guī)做法,我們會
num = [-2, 3, 5, -4, 10, 7]
result = []
for x in num:
if x > 0:
result.append(x**2)
print result
然后,用列表推導(dǎo)式的話,只需要
print [x**2 for x in num if x > 0]

組成
怎么解讀這個式子呢?

把這個式子分成三個部分:輸出處理、for循環(huán)、if判斷。其中if判斷部分是可選的。
if 判斷部分是用來篩選。
輸出處理部分比較靈活,隨便自己想怎么處理。
比如有個列表A = [‘1’, ‘2’, ‘3’],我們可以[int(x) for x in A],把列表所有元素轉(zhuǎn)換成int類型。
上面是最基本的形式了。還有一些稍微復(fù)雜的形式,怎么解讀呢?

方法
方法是,除開“輸出處理”部分,其它都是按從左到右順序來的。
1)多個for循環(huán)
[(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)嵌套列表推導(dǎo)式
[[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)其他推導(dǎo)式
除了列表推導(dǎo)式。還有生成器推導(dǎo)式、集合推導(dǎo)式(python2.7及以上)、字典推導(dǎo)式(python2.7及以上)。
[x for x in range(3)] #-> 列表推導(dǎo)式
(x for x in range(3)) #-> 生成器推導(dǎo)式
{x for x in range(3)} #-> 集合推導(dǎo)式
{x:None for x in range(3)} #-> 字典推導(dǎo)式
比如
>>> 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加密傳輸?shù)模栽谶M行接口自動化時,需要對所傳的參數(shù)進行base64編碼,對拿到的響應(yīng)報文進行解碼;
例如:作業(yè)平臺的fast_execute_script(快速執(zhí)行腳本)的script_content
python3.x 中字符都為unicode編碼,而b64encode函數(shù)的參數(shù)為byte類型,所以必須先轉(zhuǎn)碼。
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
藍鯨智云
本文由騰訊藍鯨智云編輯發(fā)布,騰訊藍鯨智云(簡稱藍鯨)軟件體系是一套基于PaaS的技術(shù)解決方案,致力于打造行業(yè)領(lǐng)先的一站式自動化運維平臺。目前已經(jīng)推出社區(qū)版、企業(yè)版,歡迎體驗。
- 官網(wǎng):https://bk.tencent.com/
- 下載鏈接:https://bk.tencent.com/download/
- 社區(qū):https://bk.tencent.com/s-mart/community/question