1. 程式人生 > >python --012--推導式

python --012--推導式

推導式 字典推導式 集合推導式

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--推導式