Python自學記錄——切片、迭代

在Python中,代碼不是越多越好,而是越少越好;代碼不是越複雜越好,而是邏輯越簡單越好。基於這個思想,我們可以學習下Python的高級特性,它能減少代碼量。Python中,代碼越少,開發效率越高。

切片:

Python中取一個 list 或 tuple 中部分元素是很常見的操作,一般來講,有兩種笨方法,下面以取 list 前三個元素爲例:

>>> L1=[1,2,3,4,5]
>>> [L1[0],L1[1],L1[2]]
[1,2,3]
>>> L2=[]
>>> for i in range(3):
...     L2.append(L2[i])
...
>>> L2
[1,2,3]

Python中的 切片 操作符能大大簡化這樣的寫法,示例如下:

>>> L1[0:3]
[1,2,3]

解釋一下,元素從索引0開始取,取到索引3停止,但不包括索引3。即索引0、1、2,共計3個元素,得到的結果仍是 list。

如果第一個索引是0的話,還可以省略掉,方法如下:

>>> L1[:3]
[1,2,3]

同理,取 list 第二個元素和第三個元素的寫法如下:

>>> L1[1:3]
[2,3]

Python中同樣也支持 倒數切面,倒數切片索引值從 -1 開始 ,示例如下:

>>> L1[-2:]
[4,5]
>>> L1[-2:-1]
[4]

以第二個執行語句爲例,解釋一下,元素從末尾開始取值,從索引-2開始,取到索引-1,但不包括-1,所以,只取到索引-2的一個元素,共計1個元素。

切片取值很靈活,比如,L1前四個元素每兩個元素取一次,寫法如下:

>>> L1[:4:2]
[1,3]

L1 中,所有元素每兩個元素取一次:

>>> L1[::2]
[1,3,5]

甚至,只寫切片符號的話,可以直接複製一個 list :

>>> L2 = L1[:]
>>> L2
[1,2,3,4,5]

其中,tuple 也是一種 list,也可使用切片方法,但操作的結果仍是 tuple,示例如下:

>>> (1,2,3,4,5)[:3]
(1,2,3)

在 Python 中,字符串也可執行切片操作,示例如下:

>>> 'ABCDEFG'[:3]
'ABC'

友情提示,小白的我開始把切片和切面思想弄混了。。基礎不紮實。。下面簡單說下我自己的理解:

切片 是針對列表取值時用的,如Python中 list、tuple的取值;而切面思想大體理解是 在一個整體項目中,切開一個口,把代碼放進去,讓它在項目運行時運行,不影響項目的正常運行,以Java爲例,常見的例子有:過濾器,監聽器,攔截器等。

迭代:

 一般情況下我們會用 for 循環來遍歷 list 或 tuple 等,這種遍歷的方式我們稱爲迭代。

迭代一般常用在有下表的對象上,但在沒有下表的對象上也可以使用,以 dict 爲例,示例如下:

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

字符串也是可以迭代的對象,示例如下:

>>> for x in 'ABCD':
...     print(x)
...
A
B
C
D

當我們使用 for 循環時,只要對象是可迭代對象,就可以對其使用 for 循環,有個方法可以判斷 對象 是否是迭代對象,示例如下: 

>>> from collections import Iterable
>>> isinstance('abc',Iterable)
True
>>> isinstance([1,2,3],Iterable)
True
>>> isinstance(123,Iterable)
False

如上所示,整數不可迭代。

要想打印出 list 的 下標,可以用  enumerate ,示例如下:

>>> for i,x in enumerate([1,2,3]):
...     print(x)
...
0 1
1 2
2 3

上述例子中,循環定義了兩個變量,這種寫法在 Python 中很常見,一般可以這樣寫:

>>> for x,y in ([1,2],[3,4],[5.6]):
...     print(x,y)
...
1 2
3 4
5 6

本篇暫時就到這裏了,教材網址:https://www.liaoxuefeng.com, 繼續學習~~

 

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