Python基礎(chǔ)知識——列表(一)

列表讓你能夠在一個地方存儲成組的信息,其中可以只包含幾個元素,也可以包含數(shù)百萬個元素。在本章節(jié)中,將對列表進(jìn)行簡單的介紹,并學(xué)習(xí)一些關(guān)于列表的簡單操作,其中用到的一些例子均來自《Python編程從入門到實踐 第2版》。

一、什么是列表

列表是一系列按特定順序排列的元素組成的,在Python中,用方括號([])表示列表,并用逗號分隔其中的元素,其格式為:
列表名 = [元素1,元素2,...]
例如可以設(shè)置一個自行車列表如下:

bicycles = ['trek', 'cannondale', 'redline', 'specialized']
print(bicycles)

如果讓Python將列表打印出來,Python將打印列表的內(nèi)部表示,包括方括號:

['trek', 'cannondale', 'redline', 'specialized']

1. 訪問列表元素

列表是有序集合,因此在訪問列表元素時,只需要將其索引告訴Python即可。
比如從上面的bicycles列表中提取第一款自行車:

bicycles = ['trek', 'cannondale', 'redline', 'specialized']
print(bicycles[0])

此時Python返回的元素是trek,還可以使用之前學(xué)習(xí)的操作字符串的方法,對其進(jìn)行大小寫的變化,這里就不詳述了。(詳見Python基礎(chǔ)知識——變量和簡單數(shù)據(jù)類型

2. 索引從0而不是1開始

在Python中,索引是從0開始的,即索引為其位置減一,為了訪問最后一個列表元素方便,Python還提供了一種特殊語法,通過將索引指定為-1,可以讓Python返回最后一個列表元素。

3. 使用列表中的各個值

列表中的各個值可以像其他變量一樣使用,下面嘗試從列表中提取第一款自行車,并使用這個創(chuàng)建一條消息:

bicycles = ['trek', 'cannondale', 'redline', 'specialized']
message = f"My firstt bicycle was a {bicycles[0].title()}."

print(message)

我們使用bicycles[0]值生成了一個句子,并將其賦給變量message,輸出是一個簡單的句子:

My first bicycle was Trek.

二、修改、添加和刪除元素

創(chuàng)建的大多數(shù)列表都是動態(tài)的,這意味著列表創(chuàng)建后,將隨著程序的運(yùn)行增刪元素。

1. 修改列表元素

修改列表元素的語法與訪問列表元素的語法類似,要修改列表元素,可指定列表名和要修改的元素的索引,再指定該元素的新值。
例如,假設(shè)有一個摩托車列表,其中的第一個元素為'honda',下面修改它的值:

motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)

motorcycles[0] = 'ducati'
print(motorcycles)

此時,列表的第一個元素的值改變了,但其他元素的值沒有變:

['honda', 'yamaha', 'suzuki']
['ducati', 'yamaha', 'suzuki']

2. 在列表中添加元素

Python提供了多種在既有列表中添加新數(shù)據(jù)的方式。

motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)

motorcycles.append('ducati') # 在列表末尾添加元素'ducati'
print(motorcycles)

motorcycles = ['honda', 'yamaha', 'suzuki']

motorcycles.insert(0, 'ducati') # 在索引0處添加元素'ducati'
print(motorcycles)

方法append()讓動態(tài)地創(chuàng)建列表易如反掌,可以先創(chuàng)建一個空列表,再使用一系列函數(shù)調(diào)用append()來添加元素。這種創(chuàng)建方式極其常見,因為經(jīng)常要等程序運(yùn)行后,才知道用戶要在程序中存儲哪些數(shù)據(jù)。
方法insert()在索引0處添加空間,并將值'ducati'存儲到這個地方。
上述例子輸出結(jié)果為:

['honda', 'yamaha', 'suzuki']
['honda', 'yamaha', 'suzuki', 'ducati']
['ducati', 'honda', 'yamaha', 'suzuki']

3. 從列表中刪除元素

從列表中刪除一個或多個元素是經(jīng)常需要進(jìn)行的操作,可以根據(jù)位置或值來刪除列表中的元素,常用的刪除元素的方法有以下幾種:

# 使用del語句刪除元素
motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)

del motorcycles[0] # 刪除列表motorcycles中的第一個元素'honda'
print(motorcycles)
print("\n")

# 使用方法pop()刪除元素,方法pop()刪除列表末尾的元素,并讓你能夠接著使用它,列表就像一個棧,而刪除列表末尾的元素相當(dāng)于彈出棧頂元素。
motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)

popped_motorcycles = motorcycles.pop() # 將列表末尾的元素彈出并賦值給變量popped_motorcycles
print(motorcycles)
print(popped_motorcycles)
print("\n")

# 用pop()彈出列表中任何位置處的元素,在圓括號中指定要刪除元素的索引即可
motorcycles = ['honda', 'yamaha', 'suzuki']

first_owned = motorcycles.pop(0) # 將索引0出的元素彈出并賦值給變量first_owned
print(f"The first motorcycle I owned was a {first_owned.title()}.")
print("\n")

# 根據(jù)值刪除元素
# 有時候只知道要刪除的元素的值,可以使用方法remove()
motorcycles = ['honda', 'yamaha', 'suzuki', 'ducati']
print(motorcycles)

motorcycles.remove('ducati') # Python確定'ducati'出現(xiàn)在列表什么地方,并將其刪除
print(motorcycles)
print("\n")

# 使用remove()從列表中刪除元素時,也可以接著使用它的值,只需要將要刪除的值先賦值給一個變量即可
motorcycles = ['honda', 'yamaha', 'suzuki', 'ducati']
print(motorcycles)

too_expensive = 'ducati'
motorcycles.remove(too_expensive) # 使用變量too_expensive告訴Python將哪個值從列表中刪除
print(motorcycles)
print(f"A {too_expensive.title()} is too expensive for me.")

以上例子的輸出結(jié)果分別如下(其中注釋是為了方便閱讀添加的,實際輸出并沒有這些注釋,實際輸出結(jié)果為刪除注釋整行剩下的內(nèi)容):

# 使用del語句刪除元素
['honda', 'yamaha', 'suzuki']
[’yamaha', 'suzuki']

# 使用方法pop()刪除元素
['honda', 'yamaha', 'suzuki']
['honda', 'yamaha']
suzuki

# 用pop()彈出列表中任何位置處的元素
The first motorcycle I owned was a Honda.

# 根據(jù)值刪除元素
['honda', 'yamaha', 'suzuki', 'ducati']
['honda', 'yamaha', 'suzuki']

['honda', 'yamaha', 'suzuki', 'ducati']
['honda', 'yamaha', 'suzuki']
A Ducati is too expensive for me.

判斷該使用del語句還是pop()方法的一個簡單標(biāo)準(zhǔn)是:如果要從列表中刪除一個元素,并不再以任何方式使用它,就用del語句;如果要在刪除元素后還能繼續(xù)使用它,就用pop()方法。

三、組織列表

在創(chuàng)建的列表中,元素的排列順序常常是無法預(yù)測的,有時候希望能保留列表元素最初的排列順序,而有時候又需要調(diào)整排列順序,Python提供了很多組織列表的方式,可根據(jù)具體情況選用。

1. 使用方法sort()對列表永久排序

方法sort()讓你能夠較為輕松地對列表進(jìn)行排序。假設(shè)你有一個汽車列表,并要讓其中的汽車按字母順序排列:

cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.sort() # 將汽車按字母順序排列,再也無法恢復(fù)原來的排序順序
print(cars)

cars.sort(reverse = True) # 將汽車列表按與字母順序相反的順序排列
print(cars)

輸出結(jié)果如下:

['audi', 'bmw', 'subaru', 'toyota']
['toyata', 'subaru', 'bmw', 'audi']

2. 使用函數(shù)sorted()對列表臨時排序

要保留列表元素原來的排列順序,同時以特定的順序呈現(xiàn)它們,可以使用函數(shù)sorted()。

cars = ['bmw', 'audi', 'toyota', 'subaru']

print("Here is the original list:")
print(cars)

print("\nHere is the sorted list:")
print(sorted(cars)) # 打印按字母順序排列的該列表

print("\nHere is the original list again:")
print(cars)

調(diào)用函數(shù)sorted()后,列表元素的排列順序并沒有變,如果要按與字母順序相反的順序排列,也可以向sorted()傳遞參數(shù)reverse = True,上述例子輸出如下:

Here is the original list:
['bmw', 'audi', 'toyota', 'subaru']

Here is the sorted list:
['audi', 'bmw', 'subaru', 'toyota']

Here is the original list again:
['bmw', 'audi', 'toyota', 'subaru']

3. 倒著打印列表

要反轉(zhuǎn)列表元素的排列順序,可以使用方法reverse()。假設(shè)汽車列表是按購買時間排列的,可以輕松地按相反順序排列其中的汽車:

cars = ['bmw', 'audi', 'toyota', 'subaru']
print(cars)

cars.reverse()
print(cars)

注意:reverse()不少按與字母順序相反的順序排列列表元素,而只是反轉(zhuǎn)列表元素的排列順序。

4. 確定列表的長度

使用函數(shù)len()可快速獲悉列表的長度。

>>> cars = ['bmw', 'audi', 'toyota', 'subaru']
>>> len(cars)
4

四、使用列表時避免索引錯誤

剛開始使用列表時,經(jīng)常會遇到一種錯誤。
當(dāng)有一個包含三個元素的列表時,卻要求獲取第四個元素:

motorcycles = ['honda', 'yamaha' ,'suzuki']
print(motorcycles[3])

這將導(dǎo)致索引錯誤:

Traceback(most recent call last):
   File "motorcycles.py", line 2, in <module>
      print(motorcycles[3])
IndexError: list index out of range 

索引錯誤意味著Python在指定索引處找不到元素,每當(dāng)要放穩(wěn)最后一個列表元素時,都可以使用索引-1,但當(dāng)列表為空時,這種訪問最后一個元素的方式會導(dǎo)致錯誤。
注意:當(dāng)發(fā)生索引錯誤卻找不到解決辦法時,可以嘗試將列表或其長度打印出來,通過查看列表或其包含的元素數(shù),可幫助你找出這種邏輯錯誤。

五、小結(jié)

此章節(jié)中,學(xué)習(xí)了列表及對其元素的一些簡單操作。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容