測試題:
0. 下邊的清單分片操作會列印什麼内容?
>>> list1 = [1, 3, 2, 9, 7, 8]
>>> list1[2:5]
[2,9,7]
1. 請問 list1[0] 和 list1[0:1] 一樣嗎?
不一樣;前者資料類型為非序列型,後者資料類型為清單型。
list1[0]傳回1,list1[0:1]傳回[1]。
2. 如果你每次想從清單的末尾取出一個元素,并将這個元素插入到清單的最前邊,你會怎麼做?
3. 有些魚油比較調皮,他說我想試試 list1[-3:-1] 會不會報錯,怎麼知道一試居然顯示 [9, 7],這是怎麼回事呢?
負數索引值表示從末尾開始索引,如-1索引值(index)對應清單的最後一個元素。
end參數為負數,所表示的索引值同樣是end-1。
4. 在進行分片的時候,我們知道分片的開始和結束位置需要進行指定,但其實還有另外一個隐藏的設定:步長。
在普通的分片操作中,步長預設設定為1,表示逐個周遊元素。其實我們可以人為調整步長以達到不可告人的秘密。
>>> list1[0:6:2]
[1, 2, 7]
那麼依你推測,關于步長的知識點還有哪些(很多知識點都是通用的)?
- 之前提到的“簡潔”分片操作在這裡有效:
list1[::2]
[1, 2, 7]
- 步長不能為0,要不就走不動了:
list1[::0]
Traceback (most recent call last):
File "<pyshell#11>", line 1, in <module>
list1[::0]
ValueError: slice step cannot be zero
- 步長可以是負數,改變方向(從尾部開始向左走):
list1[::-2]
[8, 9, 3]
5. 課堂上小甲魚說可以利用分片完成清單的拷貝 list2 = list1[:],那事實上可不可以直接寫成 list2 = list1 更加簡潔呢?
不可以。
list2 = list1[:]是新建立了一個與list1相同的清單,并指派給變量list2,此時有兩個清單在記憶體中;
而list2 = list1隻是将list1指派給list2,沒有建立新清單,不過是原本的list1多了一個新标簽list2罷了,此時隻有一個清單在記憶體中。
6. 請寫下這一節課你學習到的内容:格式不限,回憶并複述是加強記憶的好方式!
1.清單的索引(index)操作
list[index]
2.清單的分片(slice)操作
list[start:end],原清單不發生任何改變,傳回的是一個原清單的不完全拷貝。
list[:end]
list[:] 傳回清單的完全拷貝
3.清單删除元素
remove():參數為需要删除的元素,重名的情況下,remove()隻會删除最靠前的那個元素。
del:一個語句,如del member[1],也可以删除整個清單,如del member
pop():由于Python的清單是利用棧這種資料結構來構成的,是以有pop(也稱出棧)的方法來删除元素。
pop()的參數為想要删除的元素的索引值,删除後并傳回被删除的元素,不帶參數則預設删除最後一個元素。
一種常用的用法:name = member.pop()