當前位置:
首頁 > 最新 > Python基礎知識系列——列表和元組

Python基礎知識系列——列表和元組

寫在前面

剛剛過完愚人節,筆者給各位大大送上一句遲來的節日祝福了(雖然這一天你可能被很多人坑過,愚弄過,但who care?畢竟坑坑更健康嘛)。過去的幾期文章中,筆者對機器學習中的KNN演算法進行了簡單介紹,但是有部分讀者反映對於Python的基礎語法缺乏認識,所以對於文章中的很多內容無法深入理解,雖然筆者在開稿之前已經強調過,本公眾號主要針對於已有python基礎的讀者,但是筆者最終還是無法擺脫部分讀者的強烈要求(你說你們留言就可以了呀,幹嘛一定要加小編微信訴苦呢),所以決定開展幾期python基礎知識的學習。不過小編並不准備系統性地去講解python的相關知識,畢竟咱不能搶書商們的生意呀,筆者大概會用7-9篇文章(筆者暫時規劃好了七篇文章,有兩篇尚在斟酌中,後期寫作中會最終確定文章篇數)較為輪廓性地講一下python之中最為關鍵的一些話題。當然筆者也希望各位朋友能夠在手邊隨時準備一本python基礎方面的書籍(python學習手冊,python基礎教程都算是不錯的python入門書籍,筆者在這裡就不再過多推薦了,以免有插播廣告之嫌,最重要的是沒有廣告費呀),這樣便可以在學習的過程中有一個系統性的學習與參考。今天筆者主要是要和大家聊一下python數據結構之中的列表與元組,下面進入正題!

不好意思,晃點你們的時候又到了,請先允許筆者在這裡介紹本文的寫作框架。本文將先介紹列表、元組等對象的祖宗序列,介紹一些序列對象的共有方法;接下來介紹列表之中的特有方法;最後簡單介紹一下列表的孿生兄弟元組的相關知識,本文的側重點會落在列表的講解中,這種數據結構也是python學習中最為常用的一種數據結構。讓我們進入python的世界吧!

Ⅰ、序列——始祖級別的python數據結構

python之中無疑存在許多數據結構,但是其中最基礎最重要的一種數據結構絕對歸屬於序列,你問我為什麼,因為人家有三個好兒子:列表、元組、字元串。這三種數據結構絕對構成了Python的半壁江山,所以你現在知道序列為什麼厲害了吧,別人是拼爹,咱是拼兒子,咱不牛誰牛。所以這也是筆者先講解序列的原因,因為序列的很多操作方法是可以直接用在列表、元組和字元串之中的,下面就介紹一些這些序列共有方法。

1.1 索引(index)

何為索引,索引就是一種位置引用,不同於其他編程語言的地方是,Python中索引的位置開始於0而不是1,這對於很多有編程經驗的同學來說無疑有點難以適應,但是適應過後你就會深深愛上這種索引方式。舉個栗子:

筆者首先定義了一個字元串對象Greeting,然後只需要用[]將你需要的位置括起來放到對象後面,便會得到相應位置上的值,這就是索引。當然除了這種正向索引之外,你也可以從後向前進行索引,只需要簡單的在數字前面加上一個-號便可以便是倒數第幾,有沒有很簡單。下面給出一個索引的程序例子(這裡要再次說明一點,為了能夠讓初學者習慣去敲寫代碼以及為了使代碼更加具有觀看性,以後筆者會在Jupyter Notebook中書寫完代碼之後直接截圖過來,不好意思,這裡筆者不接受板磚):

1.2 切片(Slice)

所謂切片,就是一種區間選擇,它是索引的升級版,因為索引更多是對單個元素的選擇,而切片便是對多個要素的同時選擇,這裡還是以Greeting這個字元串為例來進行說明,假設你想選擇這個字元串中的Hello,那麼你可以通過Greeting[0:5]進行選擇,如果你想選擇World,那麼你可以通過Greeting[6:11]進行選擇,當然你也可以通過Greeting[-5:]進行選擇。如果你想選則「H」之後的所有元素,你的確可以採用Greeting[0:11]進行選擇,但是存在一種更加簡便的方式Greeting[0:]。這裡就大致說出了切片選擇的原理,切片選擇中需要注意的兩點就是:其一,切片選擇顧首不顧尾,即切片選擇中第一個索引會被包含在選擇之內,而最後一個索引不會被包含在選擇之內,有點類似於中學學習的半開區間[a,b);其二,切片選擇中索引大小一定不能超過序列界限,否則就很容易報錯。

當然切片還有一種更加高級的索引方式,便是通過自己指定步長從而去實現個性化選擇,假如你要選擇Greeting中處於偶數位的元素,那麼你可以通過Greeting[0::2]進行選擇,所以選擇的方式完全在於你的創造力。請看例子:

1.3 序列的加法和乘法

這裡一定要強調一下,雖然這裡用了加法和乘法,但是各位朋友可不要真的把它完全當成加法了,這裡的加法和乘法都具有多態性(關於多態性這裡不過多闡述,需要了解的朋友可以參考Python學習手冊),當加法和乘法操作的對象是數值時,那麼它就是大家熟知的加法運算和乘法運算;但是當加法和乘法操作的對象是字元串時,那麼加法就相當於連接,而乘法就相當於重複。例如2+3 = 5,『2』+『3』=『23』。當然如果是操作序列對象時,加法一般用來指代連接,而乘法更多用來重複,例如存在兩個列表a=[1,2,3]和b=[2,3,4],那麼a+b=[1,2,3,2,3,4],可以看出這裡僅僅是把b連接到了a的後面,同樣如果採用乘法的話,便可以得到:a*2=[1,2,3,1,2,3]。示例如下:

1.4 成員資格檢查(in)

所謂成員資格檢查就是要確定某一個元素是不是序列之中的元素,檢查的結果會返回布爾值(布爾值就是簡單的0,1,也就是False和True)。例如存在一個字元串String = "abcdefg",如果想確定c是否存在於字元串中,可以使用『c』in String,那麼就會得到True,這就是in函數的用法。這裡強調一點(尤其是對於使用Pyhton2的朋友),in函數不僅能夠判斷單個字元,而且可以判斷某個字元串是否是一個字元串的一部分,還以上面的字元串為例,可以用"abc" in String來判斷字元串『abc』是否存在於字元串String中。下面例子顯示了一個序列判斷的例子:

1.5 序列中常用函數

使用序列時,經常被用的三個函數分別是min,max和len,這三個函數分別用來確定一個序列的最小值、最大值和序列的長度,通過命令min(String),max(String)和len(String)可以得到字元串String的最小值、最大值以及長度分別為a,g,7。當然關於這幾個函數也有一些其它的參數選項,這裡不再詳聊,各位可以參看相關教材。

Ⅱ、列表——Python主力

上文對序列這一大Boss進行了講解,下面筆者正式展開對於各個序列對象的介紹。首先,筆者要先和大家分享一下序列的嫡長子,也就是Python中的主力對象——列表。

2.1 基本列表操作

既然要使用列表,那麼最基本的入門便是你要會創建一個列表(這正所謂巧婦難為無米之炊)。在Python中創建列表是一件so easy的事情,僅僅只需使用list()函數便可以了。例如使用list("hello")便可以生成列表["h","e","l","l","o"],是不是簡單之至。在會創建列表之後,接下來你要學會一些基本的列表操作,具體包括:

A. 修改列表(別名:為列表賦值)

X = [1,2,3,4,5]

X[1] = 4

X = [1,4,3,4,5]

可以看出,你需要修改那個元素,僅僅需要將此元素重新賦值即可,並且這種賦值會直接修改列表。

B. 刪除列表元素

Names = ["apple","banana","pear"]

del Names[1]

Names = ["apple","pear"]

通過使用del語句便可以成功刪除列表中的元素banana.

C. 給切片賦值

lst = list["Pelr"]

lst[2:] = "ar"

lst = ["P","e","a","r"]

對於列表中切片的賦值和對單個元素賦值的方式相同,當然這種切片賦值的方式不一定需要被選列表長度與替換值的長度相同,例如names = list("pear"),通過names[1:] = list("ython"),則可以得到names = ["p","y","t","h","o","n"]。

2.2 常用列表方法

方法是與對象緊密聯繫的函數。方法的調用一般採用:

objects.method(arguments)

這便是使用對象方法的典型方式,下面就主要講解一下列表最常用的一些方法。

A. append方法

lst = [1,2,3]

lst.append(4)

lst = [1,2,3,4]

B. clear方法

lst = [1,2,3]

lst.clear()

lst = []

C. copy方法

lst = [1,2,3,4]

lst1 = lst.copy()

lst1 = [1,2,3,4]

D. count方法

lst = ["to","be","or","not","to","be"]

number = lst.count("be")

number = 2

E. extend方法

lst1 = [1,2,3]

lst2 = [4,5,6]

lst = lst1.extend(lst2)

lst = [1,2,3,4,5,6]

F. index方法

lst = ["We", "are", "the", "knights"]

Index = lst.index("are")

Index =2

G. insert方法

lst = [1,2,3,4,5,6]

lst.insert(1,10)

lst = [1,10,2,3,4,5,6]

H. pop方法

lst = [1,2,3,4,5,6]

lst.pop()

lst = [1,2,3,4,5]

I. remove方法

lst = [1,2,3,4,5,6]

lst.remove(2)

lst = [1,3,4,5,6]

J. reverse方法

lst = [1,2,3,4,5,6]

lst.reverse()

lst = [6,5,4,3,2,1]

K. sort方法

lst = [1,4,6,7,3,5]

lst.sort()

lst = [1,3,4,5,6,7]

這便是列表之中的常用方法,鑒於各個例子已經很好地說明了方法的用法,因此不再詳細解釋這些方法。下面讓我們拜訪一下列表的孿生兄弟——元組。

Ⅲ、元組——列表的孿生兄弟

與列表一樣,元組也是序列,唯一的差別在於元組是不能修改的。元組語法很簡單,只要將一些值用逗號分隔,就能自動創建一個元組。例如你輸入1,2,3,那麼在python看來你便是輸入了一個元組,它會相應輸出(1,2,3)。有一點必須明確,元組的真正標誌是「,」號,而不是括弧,這一點一定要多加註意,所以如果你要創建一個單元素的元組,那麼你保證輸入的結尾以逗號結束。

作為列表的孿生兄弟,元組的很多操作與列表類似,當然除了列表之中用於修改的方法之外,其他方法列表和元組是通用的。因此,筆者在這裡便不再贅述。

那麼,不禁要問,既然元組只是閹割的列表,那麼為什麼還需要掌握元組呢,這主要歸於兩點:

1、它們可以用作字典中的鍵(以及集合的成員),而列表不行。字典將在後文中講解。

2、有些內置函數和方法返回元組,這意味著必須跟它們打交道。

後記

講到這裡,本文算告一段落了,本期文章中,筆者和大家講解了一下Python之中最重要的兩種序列:列表和元組。通過對它們的講解,大致了解了序列以及列表之中常用方法和函數,因此筆者準備再接再厲,在下一期文章中,筆者準備接著講述Python中另外一種序列對象,字元串,這一你將經常打交道的數據結構。下期文章筆者將和大家詳聊一番這一數據結構,敬請期待!


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Python 的精彩文章:

Python 中的字典—Python 基礎
人工智慧時代來臨 學Python開發技術應時代趨向

TAG:Python |