Python學習系列 - 高級特性學習(三)

今天進入高級特性的學習啦,其實就是怎麼能更簡單的寫代碼。

高級特性

切片

記住一個關鍵就是切片的時候含頭不含尾!!!python

  • 以前在學習基本類型的時候提到過這個特性,就是將字符串或者列表的一部分截取出來。
list = ['one', 'two', 'three', 'four', 'five']  
# 取出該list的前三個元素組成一個新的list
print(list[0: 3])
運行結果:
['one', 'two', 'three']
  • list[0:3]表示,從索引0開始取,直到索引3爲止,但不包括索引3。即索引012,正好是3個元素。
    若是第一個索引爲0的話,仍是能夠省略的。
list = ['one', 'two', 'three', 'four', 'five']  
# 取出該list的前三個元素組成一個新的list
print(list[: 3])
運行結果:
['one', 'two', 'three']
  • python支持倒數切片,記住倒數第一個元素的索引是-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>

建立Lg的區別僅在於最外層的[]()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類型,它們表示一個惰性計算的序列;
  • 集合數據類型如listdictstr等是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

部份內容參考:
https://www.liaoxuefeng.com/w...

相關文章
相關標籤/搜索