Python學習筆記(三)

Python學習筆記(三)

高級特性

1.切片

顧名思義,就是對集合進行切取,類似java中的subString()方法的功能。在Python中能進行切片操作的有List,tuple,字符串。在其他語言中需要寫循環語句來遍歷達到截取的目的,在Python中很簡單。

L = list(range(100))  
print(L[0:10])
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]  

L[0:10]表示從從索引0開始取,直到索引10爲止,但不包括索引10
如果第一個索引是0,還可以省略:

L = list(range(100))  
print(L[:10])
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]  

它同樣支持倒數切片,例如:

L = list(range(100))
print(L[-5:])
[95, 96, 97, 98, 99]  

L[-5:]表示重倒數第5個開始打印,一直到L末尾元素。

前10個數,每兩個取一個:

L = list(range(100))     
print(L[:10:2])  
[0, 2, 4, 6, 8]  

L[:10:2]表示沒隔兩個取一個。
複製一個list可以用[:]來處理。
tuple也是一種list,唯一區別是tuple不可變。因此,tuple也可以用切片操作,只是操作的結果仍是tuple:

t = (1,2,3)     
print(t[0:3])  
(1, 2, 3)  

字符串’xxx’也可以看成是一種list,每個元素就是一個字符。因此,字符串也可以用切片操作,只是操作結果仍是字符串:

str = 'ABCDEFG'   
print(str[0:3])  
ABC

2.迭代

在Python中只要是可迭代對象,無論有無下標,都可以迭代,判斷一個對象是否是可迭代對象

from collections import Iterable
print(isinstance('abc',Iterable))  
True

在java中迭代通過for循環來完成,但是在Python中通過for...in來完成:
迭代list:

L= [1,2,3]
for i in L:
    print(i)  
1
2
3  

迭代dict:

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

默認情況下,dict迭代的是key。如果要迭代value,可以用for value in d.values()

d = {'a': 1, 'b': 2, 'c': 3}
for value in d.values():
    print(value)  
2
3
1  

迭代字符串:

for ch in 'ABC':
    print(ch)  
A
B
C    

如果我們想得到索引index和對應的value,可以通過Python內置函數enumerate來把一個list變成索引-元素對,這樣就可以用for來獲同事迭代索引和元素本身。

L = ['A','B','C']
for ch in enumerate(L):
    print(ch)  
(0, 'A')
(1, 'B')
(2, 'C')  

打印結果是一個一個的tuple,說明是enumerate將list變成一個裝有tuple的list。

L = ['A','B','C']
for index,value in enumerate(L):
    print(index,value)
0 A
1 B
2 C  

for循環中還可以引入兩個變量。
zip()函數可以把兩個 list 變成一個 list:

L1= [1,2,3,4]
L2 = ['android','java','kotlin','Rxjava']
for x in zip(L1,L2):
    print(x)  
(1, 'android')
(2, 'java')
(3, 'kotlin')
(4, 'Rxjava')  

3.列表生成器

列表生成式即List Comprehensions,是Python內置的非常簡單卻強大的可以用來創建list的生成式。
創建一個[1*1,2*2,3*3...,10*10]的集合:

L = [x * x for x in range(1,11)]  
print(L)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]  

for 循環後面還可以添加判斷條件:

L2 = [x * x for x in range(1,11) if x %2 == 0]
print(L2)  
[4, 16, 36, 64, 100]  

還可以使用兩層循環,可以生成全排列:

L3 = [m + n for m in 'ABC' for n in 'XYZ']
print(L3)  
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']  

列表生成式也可以使用兩個變量來生成list:

d = {'x': 'A', 'y': 'B', 'z': 'C' }
print([k+':'+v for k,v in d.items()])  
['y:B', 'z:C', 'x:A']

items()函數的作用是將dict裏面的key-value轉變成tuple裝進一個list裏面

d = {'x': 'A', 'y': 'B' , 'z': 'C' }  
print(d.items())  
dict_items([('z', 'C'), ('y', 'B'), ('x', 'A')])  

把一個list中所有的字符串變成小寫:

L = ['Hello', 'World', 'IBM', 'Apple']
print([s.lower() for s in L])  
print([s.upper() for s in L])
['hello', 'world', 'ibm', 'apple']  
['HELLO', 'WORLD', 'IBM', 'APPLE']

lower()函數的作用是將字符串變成小寫,upper()函數的作用是將字符串變成大寫。

3.生成器

在Python中,這種一邊循環一邊計算的機制,稱爲生成器:generator。

L = [s * s for s in range(1,11)]
print(L)
G = (s * s for s in range(1,11))
print(G)  
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
<generator object <genexpr> at 0x002C05A0>  

創建LG的最大的區別就是[]()的區別,L是一個list,G是一個generator。
獲取generator裏面的每一個元素,可以利用next()函數,類似於指針作用,指向哪個元素就可以打印出哪個元素。也可以通過for循環來打印:

G = (s * s for s in range(1,11))
for s in G:
    print(s)  
1
4
9
16
25
36
49
64
81
100  

如果一個函數定義中包含yield關鍵字,那麼這個函數就不再是一個普通函數,而是一個generator.

參考資料:廖雪峯的官方網址

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章