python --012--推導式
阿新 • • 發佈:2018-04-24
推導式 字典推導式 集合推導式 Python的推導式
python的推到式(列表推導式,字典推導式,集合推導式)
推導式:comprehensions(解析式)
是python中獨特的特性,推到式是可以從一個數據結構序列構件另外一個數據
三種推導式
1、列表推導式
2、字典推導式
3、集合推導式
·列表推導式
1、使用[]生成一個列表list
基本格式
v(變量) = [每一個元素的運算法則 for 變量 in 可叠代對象 if布爾表達式]
1、運算法則:表達式 / 函數(有返回值)
2、for 變量 in 刷卡叠代對象:每一次叠代出的元素,賦值給變量
列表中的元素——->表達式--->元素
l=[i+1 for i in range(10)]
print l#[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
3、if 布爾表達式:根據條件過慮值
註意:if 判斷可以省略不做任何判斷,其他部分不能省略
l=[i for i in range(10) if i%2==0]
print l#[0, 2, 4, 6, 8]
2、使用()生成generator生成器
generator:生成器
l=(fun(i) for i in range(31) if i%3==0) print l#<generator object <genexpr> at 0x052DAA08> print type(l)#<type ‘generator‘>生成器
生成器不會把結果保存在一個序列中,而是保存生成器的狀態,在每一次
叠代的時候,返回一個值,直到遇到stopiteration異常結束。
列表推導式與生成器的區別:
1、通過推導式直接創建所有的元素,占用空間大
2、生成器相當於一個工具,創建列表的工具,更加省空間,用多少創建多少,只要不要超過上限
特點
1、生成器本質也是一個可叠代對象(利用for循環進行遍歷,for循環會調用next()方法) 2、next():調用n次next的方法,創建n個元素 l2=(i for i in range(100)) print l2#<generator object <genexpr> at 0x052DAA08> l2.next()#0 l2.next()#1 l2.next()#2
字典推導式:
字典推導式和列表推導式使用方法類似
創建形式:
變量={ 鍵:值 for 變量 in 可叠代對象 if 布爾表達式}
鍵值:可以是表達式,也可以是一個函數(有返回值的函數)
d={str(i):i**2 for i in range(10) if i%3==0}
d#{‘9‘: 81, ‘0‘: 0, ‘3‘: 9, ‘6‘: 36}
#給定一個字典d1={‘one‘:1,‘two‘:2,‘three‘:3}請轉換字典中的鍵與值
d1 #{1: ‘one‘, 2: ‘two‘, 3: ‘three‘}
for i in d1.iteritems():
#iteritems()返回鍵值對 ,如果直接在d1中可叠代,只是返回鍵。
print i#返回(‘three‘, 3) (‘two‘, 2) (‘one‘, 1)
for key,value in d1.iteritems():
print key,value#返回 three 3 two 2 one 1
d1={value:key for key,value in d1.iteritems()}
print d1#{1: ‘one‘, 2: ‘two‘, 3: ‘three‘}
集合推導式
定義形式:
變量={ 表達式 for 變量 in 可叠代對象 if 布爾表達式}
表達式:可以是普通表達式,也可以是一個函數(帶有返回值的函數)
s={ i for i in range(10)if i%2==0}
print s#set([0, 8, 2, 4, 6])
python --012--推導式