《零基礎入門學習Python》(11)--列表:一個打了激素的陣列(二)
阿新 • • 發佈:2018-11-09
前言
上節課我們介紹一個打了激素的陣列,叫做列表。列表我們比作一個大倉庫,你所能夠具現化的東西,都可以往裡面扔,它包羅永珍。另外還介紹了三個往列表新增元素的方法,分別是:
append()
,extend()
,insert()
append()和extend()
這兩個方法都只有1
個引數:
append
引數是一個準備插入列表的元素.
extend
引數是一個列表,它是用一個列表來擴充套件另一個列表
insert()
方法有2
個引數,第1個引數是帶插入位置的索引值
,第2個引數是準備插入的元素
.
這個課我們接著談一下列表常用的一些方法:
知識點
從列表中獲取元素
跟陣列一樣,我們可以通過元素的索引值index
例:
>>> member = ['小甲魚', '小布丁', '黑夜', '怡靜', '葫蘆娃哇', '竹林小溪', 'Crazy迷戀'] >>> member[0] '小甲魚' >>> member[1] '小布丁' >>> temp = member[0] >>> member[0] = member[1] >>> member ['小布丁', '小布丁', '黑夜', '怡靜', '葫蘆娃哇', '竹林小溪', 'Crazy迷戀'] >>> member[1] = temp >>> member ['小布丁', '小甲魚', '黑夜', '怡靜', '葫蘆娃哇', '竹林小溪', 'Crazy迷戀'] >>>
>>> member
['小甲魚', 88, '黑夜', 90, '迷途', 85, '怡靜', 90, '秋舞斜陽', 88]
>>> member[-2]
'秋舞斜陽'
從列表中刪除元素
- remove()(只能刪除第一個指定的值,如果後面有重複則不能刪除)
>>> member.remove('怡靜')
>>> member
['小布丁', '小甲魚', '黑夜', '葫蘆娃哇', '竹林小溪', 'Crazy迷戀']
- del
>>> del member[1] >>> member ['小布丁', '黑夜', '葫蘆娃哇', '竹林小溪', 'Crazy迷戀'] >>> del member[1] >>> member ['小布丁', '黑夜', '葫蘆娃哇', '竹林小溪', 'Crazy迷戀'] >>> del member >>> member Traceback (most recent call last): File "<pyshell#54>", line 1, in <module> member NameError: name 'member' is not defined
- pop()
- 因為Python的列表是利用棧資料結構進行儲存的,因此有pop這個彈棧的方法。
-
pop方法是從列表中取出一個元素,並返回給你
>>> member.pop()
'Crazy迷戀'
>>> member
['小布丁', '黑夜', '葫蘆娃哇', '竹林小溪']
>>>
>>> name = member.pop()
>>> name
'竹林小溪'
>>> member
['小布丁', '黑夜', '葫蘆娃哇']
>>>
>>> member.pop(1)
'黑夜'
>>> member
['小布丁', '葫蘆娃哇']
>>>
列表分片
利用索引值,每次我們可以從列表獲取一個元素,但是我們總是貪心的,如果一次性需要獲取多個元素,有沒有辦法實現呢?利用列表分片,我們可以簡單的實現這個要求。
>>> member
['小布丁', '黑夜', '葫蘆娃哇', '竹林小溪', 'Crazy迷戀']
>>>
>>> member[1:3]
['黑夜', '葫蘆娃哇']
>>> member
['小布丁', '黑夜', '葫蘆娃哇', '竹林小溪', 'Crazy迷戀']
>>>
>>> member[:3]
['小布丁', '黑夜', '葫蘆娃哇']
>>> member[:]
['小布丁', '黑夜', '葫蘆娃哇', '竹林小溪', 'Crazy迷戀']
>>> member[1:]
['黑夜', '葫蘆娃哇', '竹林小溪', 'Crazy迷戀']
>>> member2 = member[:]
>>> member2
['小布丁', '黑夜', '葫蘆娃哇', '竹林小溪', 'Crazy迷戀']
課後習題
測試題
下邊的列表分片操作會列印什麼內容?
>>> list1 = [1,3,2,9,7,8]
>>> list1[2:5]
執行結果:
[2, 9, 7]
請問list1[0]和list1[0:1]一樣嗎?
不一樣,list1[0]返回第0個元素的值,list1[0:1]返回一個只含有第0個元素的列表。
>>> list1[0]
1
>>> list1[0:1]
[1]
>>>
如果你每次想從列表末尾取出一個元素,並將這個元素插入列表的最前邊,你會怎麼做?
>>> list1 = [1, 3, 2, 9, 7, 8]
>>>
>>> list1.insert(0,list1.pop())
>>> list1
[8, 1, 3, 2, 9, 7]
python 的列表很聰明,支援負數索引,如圖:
正常索引是從左到右索引,負數索引是從右到左。
在進行分片的時候,我們知道分片開始和位置結束需要進行指定,但其實還有另外一個隱藏的設定:步長。
在普通的分片操作中,步長預設設定為1,表示逐個遍歷元素。其實我們可以人為調整步長達到不可告人的祕密。請看以下程式:
>>> list1 = [1, 3, 2, 9, 7, 8]
>>> list1[0:6:2]
[1, 2, 7]
>>> list1[::0]
Traceback (most recent call last):
File "<pyshell#32>", line 1, in <module>
list1[::0]
ValueError: slice step cannot be zero
>>> list1[::-2]
[8, 9, 3]
可用利用分片完成列表的拷貝list2 = list1[:],那事實上可不可以直接寫成list2 = list1更加簡潔呢?
例如:
>>> list1 = [1, 3, 2, 9, 7, 8]
>>> list2 = list1[:]
>>> list2
[1, 3, 2, 9, 7, 8]
>>>
>>> list3 = list1
>>> list3
[1, 3, 2, 9, 7, 8]
>>>
#看上去貌似一樣。但事實上呢?我們利用列表的一個方法進行修改,看下差別:
>>> list1.sort()
>>> list1
[1, 2, 3, 7, 8, 9]
>>> list2
[1, 3, 2, 9, 7, 8]
>>> list3
[1, 2, 3, 7, 8, 9]
>>>