程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

【經驗分享】Python技巧之推導式

編輯:Python

簡介

列表推導式(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]

組成

怎麼解讀這個式子呢?

image.png

把這個式子分成三個部分:輸出處理、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

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved