1. 程式人生 > >《零基礎入門學習Python》(11)--列表:一個打了激素的陣列(二)

《零基礎入門學習Python》(11)--列表:一個打了激素的陣列(二)

前言

上節課我們介紹一個打了激素的陣列,叫做列表。列表我們比作一個大倉庫,你所能夠具現化的東西,都可以往裡面扔,它包羅永珍。另外還介紹了三個往列表新增元素的方法,分別是:

append(),extend()insert()

append()和extend()這兩個方法都只有1個引數:

append引數是一個準備插入列表的元素.

extend引數是一個列表,它是用一個列表來擴充套件另一個列表

insert()方法有2個引數,第1個引數是帶插入位置的索引值,第2個引數是準備插入的元素.

這個課我們接著談一下列表常用的一些方法:

知識點

從列表中獲取元素

跟陣列一樣,我們可以通過元素的索引值index

從列表獲取單個元素,注意,列表的索引值是從0開始。(但是有一個點是不一樣的,這個列表可以輸入負的索引值,-1想到於倒著查詢)
例:

>>> 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]
>>>