今天進入高級特性的學習啦,其實就是怎麼能更簡單的寫代碼。
記住一個關鍵就是切片的時候含頭不含尾!!!
python
list = ['one', 'two', 'three', 'four', 'five'] # 取出該list的前三個元素組成一個新的list print(list[0: 3]) 運行結果: ['one', 'two', 'three']
list[0:3]
表示,從索引0
開始取,直到索引3
爲止,但不包括索引3
。即索引0
,1
,2
,正好是3個元素。0
的話,仍是能夠省略的。list = ['one', 'two', 'three', 'four', 'five'] # 取出該list的前三個元素組成一個新的list print(list[: 3]) 運行結果: ['one', 'two', 'three']
-1
。list = ['one', 'two', 'three', 'four', 'five'] # 取出該list倒數第三個以前全部元素組成一個新的list print(list[: -3]) 運行結果: ['one', 'two']
list = ['one', 'two', 'three', 'four', 'five'] # 全部的元素裏面每隔兩個取一個元素 print(list[::2]) 運行結果: ['one', 'three', 'five']
經過for循環遍歷一個list。函數
list = ['one', 'two', 'three', 'four', 'five'] for value in list: # 將list中每個元素都打印出來 print(value) 運行結果: one two three four five
能夠遍歷字典的key和value:學習
y = {'a': 1, 'b': 2, 'c': 3} for a in y.keys(): print(a) for b in y.values(): print(b) 運行結果: a b c 1 2 3
列表生成式即List Comprehensions,是Python內置的很是簡單卻強大的能夠用來建立list的生成式。
python range()
函數可建立一個整數列表,通常用在 for 循環中。code
# 若是是單純生成一個整數列表,那麼咱們直接使用range()就能夠了,但是若是咱們須要生成複雜的話就須要列表生成式了。 # 生成一個1到10的list l = range(1,11) print(l) # 生成一個1到10的平方的list t = [x * x for x in range(1, 11)] print(t) 運行結果: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
還能夠生成更復雜更多條件的列表對象
# 生成一個1到10中偶數的平方list l = [x * x for x in range(1, 11) if x % 2 == 0] print(l) 運行結果: [4, 16, 36, 64, 100]
經過列表生成器咱們能夠生成符合要求的全部列表,但是若是咱們想要生成一個很是大的列表的話要怎麼辦呢?
在Python中,有種一邊循環一邊計算的機制,稱爲生成器:generator
。索引
# 建立一個list l = [x * x for x in range(1,11) if x % 2 == 0] print(l) # 建立一個generator g = (x * x for x in range(1,11) if x % 2 == 0) print(g) 運行結果: [4, 16, 36, 64, 100] <generator object <genexpr> at 0x000001C600C81B30>
建立L
和g
的區別僅在於最外層的[]
和()
,L
是一個list,而g
是一個generator。three
打印generator元素可使用next(g),每次調用next(g),就計算出g的下一個元素的值,直到計算到最後一個元素,沒有更多的元素時,拋出StopIteration的錯誤。字符串
g = (x * x for x in range(1, 11) if x % 2 == 0) print(next(g)) print(next(g)) print(next(g)) print(next(g)) print(next(g)) print(next(g)) 運行結果: 4 16 36 64 100 Traceback (most recent call last): File "D:/WorkSpace/Study/pythonTest/dataType.py", line 7, in <module> print(next(g)) StopIteration
固然也可使用for循環進行迭代,不會有任何異常。get
g = (x * x for x in range(1, 11) if x % 2 == 0) for value in g: print(value) 運行結果: 4 16 36 64 100
能夠被next()
函數調用並不斷返回下一個值的對象稱爲迭代器:Iterator
。
可使用isinstance()
判斷一個對象是不是Iterator
對象:generator
a = isinstance((x for x in range(10)), Iterator) print(a) a = isinstance([], Iterator) print(a) a = isinstance({}, Iterator) print(a) a = isinstance('abcd', Iterator) print(a) 運行結果: True False False False
for
循環的對象都是Iterable
類型;next()
函數的對象都是Iterator
類型,它們表示一個惰性計算的序列;list
、dict
、str
等是Iterable
但不是Iterator
,不過能夠經過iter()
函數得到一個Iterator
對象。# 經過iter()得到一個Iterator對象 a = isinstance(iter([]), Iterator) print(a) a = isinstance(iter({}), Iterator) print(a) a = isinstance(iter('abcd'), Iterator) print(a) 運行結果: True True True