python基礎2

高級特性

切片

切片即取一個list 或者 tuple 的部分元素python

L= ["abc", "bcd", "efg", 123, 666]

L[0 : 3]    #取前3個元素,左閉右開
L[ : 3]     #取前3個元素,左端索引爲0可省略
L[-2 : ]    #取倒數第2個一直到末尾
L[-3: -1]   #取倒數第3和第2個,注意倒數第一個元素的索引是-1

L[ :10 :2]    #取前10個數,每2個取1個

L[:]    #原樣複製一個list

注:tuple也可切片,結果還是tuple; str同理app

迭代

迭代即使利某個list或者tuple,或者str函數

#dict 迭代key
d = {'a': 1, 'b': 2, 'c': 3}
for key in d:
    print(key)

#dict默認迭代key,若要迭代value
for val in d.values():
    print(val)

#同時迭代key 和 value
for k, v in d.items():
    print(k, v)

#若是在迭代list時想要下標,可以使用 enumerate 函數把list變成索引-元素對
for i, val in enumerate(['A', 'B', 'C'])
    print(i, val)

列表生成式

列表生成式在python中用來生成listspa

#生成內容爲1到10的list
list( range(1, 11) )
#生成從1到10的平方的列表,先把x*x寫在前面,列表生成式則用for循環的形式
L = [x*x for x in range(1, 11) ]    
#能夠在for循環後加上if,篩選出偶數的平方
L = [x*x for x in range(1, 11) if x % 2 == 0]  

#使用雙層嵌套循環,生成全排列
[s1 + s2 for s1 in 'ABC' for s2 in 'XYZ']

#遍歷字典生成全排列
d = {'x': 'A', 'y': 'B', 'z': 'C' }
[k + '=' + 'v' for k, v in d.items()]

生成器 generator

生成器可使得在循環的過程當中不斷推算出後面元素,而沒必要建立完整的list,從而能夠節省空間code

生成器有兩種:列表生成式構造的生成器、由函數構造的生成器對象

1)列表生成式構造的生成器:將列表生成式的 [ ] 改爲 ( ) 便可blog

L = [x * x for x in range(10)]    #普通的列表生成式

g = (x*x for x in range(10))    #g是一個生成器
print(next(g))      #用next()函數能夠得到generator的下一個返回值,沒有元素時繼續調用next() 會拋出StopIteration錯誤

g = (x*x for x in range(10))    #g是一個生成器
for i in g:      #生成器也是可迭代對象,所以能夠用for循環
    print(i)

2)由函數構造的生成器:使用yield索引

#例子1
def odd():      #函數中包含yield關鍵字,則函數再也不是普通函數,而是generator
    print('step 1')
    yield 1
    print('step 2')
    yield 3
    print('step 3')
    yield 5
myOdd = odd()      #這也不是普通的函數調用,而是生成了一個generator對象
next(myOdd)        #用next() 函數不斷得到下一個返回值

yield:函數執行到yield以後就進行返回,等到下次next()執行時,從上次返回的yield下方繼續執行generator

#例子2,輸出楊輝三角:將每一行看做一個list,寫一個generator,使得能不斷輸出下一行的list
def triang():
    L = [1]
    while True:
        yield L
        lens = len(L)
        L = [ L[n] + L[n+1] for n in range(0, lens - 1)]#生成每行除了一頭一尾的全部數字
        L.insert(0, 1)    #添加開頭的1
        L.append(1)    #添加末尾的1

 

注意:1.楊輝三角的第n+1行每個元素都是第n行的上面兩個數的和(除了一頭一尾的兩個1)it

           2.while True 很經常使用

 迭代器

可迭代對象 Iterable:能夠直接做用於for循環的對象稱爲可迭代對象,如 list、tuple、dict、set、str等;可以使用isinstance() 判斷一個對象是不是Iterable對象

isinstance([], Iterable)      #判斷是不是可迭代對象
isinstance('abc', Iterable)
isinstance((x for x in range(10)), Iterable)

迭代器對象 Iterator:能夠被next() 函數調用並不斷返回下一個值的對象稱爲迭代器對象;可以使用isinstance() 判斷對象是不是Iterator對象;

 isinstance((x for x in range(10)), Iterator)      #生成器既是可迭代對象,又是迭代器對象

iter([1,2,3])      #iter() 函數能夠把可迭代對象變成迭代器對象
iter("abcdef")
相關文章
相關標籤/搜索