Python入門基礎之list和tuple

來源:互聯網
上載者:User

標籤:計算   不可變   append   名稱   lis   翻譯   type   自動   寫代碼   

Python之建立list

Python內建的一種資料類型是列表:list。list是一種有序的集合,可以隨時添加和刪除其中的元素。

比如,列出班裡所有同學的名字,就可以用一個list表示:

>>> [‘Michael‘, ‘Bob‘, ‘Tracy‘][‘Michael‘, ‘Bob‘, ‘Tracy‘]

list是數學意義上的有序集合,也就是說,list中的元素是按照順序排列的。

構造list非常簡單,按照上面的代碼,直接用 [ ] 把list的所有元素都括起來,就是一個list對象。通常,我們會把list賦值給一個變數,這樣,就可以通過變數來引用list:

>>> classmates = [‘Michael‘, ‘Bob‘, ‘Tracy‘]>>> classmates # 列印classmates變數的內容[‘Michael‘, ‘Bob‘, ‘Tracy‘]

由於Python是動態語言,所以list中包含的元素並不要求都必須是同一種資料類型,我們完全可以在list中包含各種資料:

>>> L = [‘Michael‘, 100, True]

一個元素也沒有的list,就是空list:

>>> empty_list = []
 Python之按照索引訪問list

由於list是一個有序集合,所以,我們可以用一個list按分數從高到低表示出班裡的3個同學:

>>> L = [‘Adam‘, ‘Lisa‘, ‘Bart‘]

那我們如何從list中擷取指定第 N 名的同學呢?方法是通過索引來擷取list中的指定元素。

需要特別注意的是,索引從 0 開始,也就是說,第一個元素的索引是0,第二個元素的索引是1,以此類推。

因此,要列印第一名同學的名字,用 L[0]:

>>> print L[0]Adam

要列印第二名同學的名字,用 L[1]:

>>> print L[1]Lisa

要列印第三名同學的名字,用 L[2]。

要列印第四名同學的名字,用 L[3]:

>>> print L[3]Traceback (most recent call last):  File "<stdin>", line 1, in <module>IndexError: list index out of range

報錯了!IndexError意思就是索引超出了範圍,因為上面的list只有3個元素,有效索引是 0,1,2。

所以,使用索引時,千萬注意不要越界。

 

Python之倒序訪問list

我們還是用一個list按分數從高到低表示出班裡的3個同學:

>>> L = [‘Adam‘, ‘Lisa‘, ‘Bart‘]

這時,老師說,請分數最低的同學站出來。

要寫程式碼完成這個任務,我們可以先數一數這個 list,發現它包含3個元素,因此,最後一個元素的索引是2:

>>> print L[2]Bart

有沒有更簡單的方法?

有!

Bart同學是最後一名,俗稱倒數第一,所以,我們可以用 -1 這個索引來表示最後一個元素:

>>> print L[-1]Bart

Bart同學表示躺槍。

類似的,倒數第二用 -2 表示,倒數第三用 -3 表示,倒數第四用 -4 表示:

>>> print L[-2]Lisa>>> print L[-3]Adam>>> print L[-4]Traceback (most recent call last):  File "<stdin>", line 1, in <module>IndexError: list index out of range

L[-4] 報錯了,因為倒數第四不存在,一共只有3個元素。

使用倒序索引時,也要注意不要越界。

 

Python之往list添加新元素

現在,班裡有3名同學:

>>> L = [‘Adam‘, ‘Lisa‘, ‘Bart‘]

今天,班裡轉來一名新同學 Paul,如何把新同學添加到現有的 list 中呢?

第一個辦法是用 list 的 append() 方法,把新同學追加到 list 的末尾:

>>> L = [‘Adam‘, ‘Lisa‘, ‘Bart‘]>>> L.append(‘Paul‘)>>> print L[‘Adam‘, ‘Lisa‘, ‘Bart‘, ‘Paul‘]

append()總是把新的元素添加到 list 的尾部。

如果 Paul 同學表示自己總是考滿分,要求添加到第一的位置,怎麼辦?

方法是用list的 insert()方法,它接受兩個參數,第一個參數是索引號,第二個參數是待添加的新元素:

>>> L = [‘Adam‘, ‘Lisa‘, ‘Bart‘]>>> L.insert(0, ‘Paul‘)>>> print L[‘Paul‘, ‘Adam‘, ‘Lisa‘, ‘Bart‘]

L.insert(0, ‘Paul‘) 的意思是,‘Paul‘將被添加到索引為 0 的位置上(也就是第一個),而原來索引為 0 的Adam同學,以及後面的所有同學,都自動向後移動一位。

 

Python從list刪除元素

 

Paul同學剛來幾天又要轉走了,那麼我們怎麼把Paul 從現有的list中刪除呢?

如果Paul同學排在最後一個,我們可以用list的pop()方法刪除:

>>> L = [‘Adam‘, ‘Lisa‘, ‘Bart‘, ‘Paul‘]>>> L.pop()‘Paul‘>>> print L[‘Adam‘, ‘Lisa‘, ‘Bart‘]

pop()方法總是刪掉list的最後一個元素,並且它還返回這個元素,所以我們執行 L.pop() 後,會列印出 ‘Paul‘。

如果Paul同學不是排在最後一個怎麼辦?比如Paul同學排在第三:

>>> L = [‘Adam‘, ‘Lisa‘, ‘Paul‘, ‘Bart‘]

要把Paul踢出list,我們就必須先定位Paul的位置。由於Paul的索引是2,因此,用 pop(2)把Paul刪掉:

>>> L.pop(2)‘Paul‘>>> print L[‘Adam‘, ‘Lisa‘, ‘Bart‘]

 

Python之在list中替換元素

 

假設現在班裡仍然是3名同學:

>>> L = [‘Adam‘, ‘Lisa‘, ‘Bart‘]

現在,Bart同學要轉學走了,碰巧來了一個Paul同學,要更新班級成員名單,我們可以先把Bart刪掉,再把Paul添加進來。

另一個辦法是直接用Paul把Bart給替換掉:

>>> L[2] = ‘Paul‘>>> print LL = [‘Adam‘, ‘Lisa‘, ‘Paul‘]

對list中的某一個索引賦值,就可以直接用新的元素替換掉原來的元素,list包含的元素個數保持不變。

由於Bart還可以用 -1 做索引,因此,下面的代碼也可以完成同樣的替換工作:

>>> L[-1] = ‘Paul‘

 

Python之建立tuple

tuple是另一種有序的列表,中文翻譯為“ 元組 ”。tuple 和 list 非常類似,但是,tuple一旦建立完畢,就不能修改了。

同樣是表示班裡同學的名稱,用tuple表示如下:

>>> t = (‘Adam‘, ‘Lisa‘, ‘Bart‘)

建立tuple和建立list唯一不同之處是用( )替代了[ ]

現在,這個 t 就不能改變了,tuple沒有 append()方法,也沒有insert()和pop()方法。所以,新同學沒法直接往 tuple 中添加,老同學想退出 tuple 也不行。

擷取 tuple 元素的方式和 list 是一模一樣的,我們可以正常使用 t[0],t[-1]等索引方式訪問元素,但是不能賦值成別的元素,不信可以試試:

>>> t[0] = ‘Paul‘Traceback (most recent call last):  File "<stdin>", line 1, in <module>TypeError: ‘tuple‘ object does not support item assignment

 

Python之建立單元素tuple

 

tuple和list一樣,可以包含 0 個、1個和任意多個元素。

包含多個元素的 tuple,前面我們已經建立過了。

包含 0 個元素的 tuple,也就是空tuple,直接用 ()表示:

>>> t = ()>>> print t()

建立包含1個元素的 tuple 呢?來試試:

>>> t = (1)>>> print t1

好像哪裡不對!t 不是 tuple ,而是整數1。為什麼呢?

因為()既可以表示tuple,又可以作為括弧表示運算時的優先順序,結果 (1) 被Python解譯器計算出結果 1,導致我們得到的不是tuple,而是整數 1。

正是因為用()定義單元素的tuple有歧義,所以 Python 規定,單元素 tuple 要多加一個逗號“,”,這樣就避免了歧義:

>>> t = (1,)>>> print t(1,)

Python在列印單元素tuple時,也自動添加了一個“,”,為了更明確地告訴你這是一個tuple。

多元素 tuple 加不加這個額外的“,”效果是一樣的:

>>> t = (1, 2, 3,)>>> print t(1, 2, 3)

 

Python之“可變”的tuple

前面我們看到了tuple一旦建立就不能修改。現在,我們來看一個“可變”的tuple:

>>> t = (‘a‘, ‘b‘, [‘A‘, ‘B‘])

注意到 t 有 3 個元素:‘a‘,‘b‘和一個list:[‘A‘, ‘B‘]。list作為一個整體是tuple的第3個元素。list對象可以通過 t[2] 拿到:

>>> L = t[2]

然後,我們把list的兩個元素改一改:

>>> L[0] = ‘X‘>>> L[1] = ‘Y‘

再看看tuple的內容:

>>> print t(‘a‘, ‘b‘, [‘X‘, ‘Y‘])

不是說tuple一旦定義後就不可變了嗎?怎麼現在又變了?

表面上看,tuple的元素確實變了,但其實變的不是 tuple 的元素,而是list的元素。

tuple一開始指向的list並沒有改成別的list,所以,tuple所謂的“不變”是說,tuple的每個元素,指向永遠不變。即指向‘a‘,就不能改成指向‘b‘,指向一個list,就不能改成指向其他對象,但指向的這個list本身是可變的!

理解了“指向不變”後,要建立一個內容也不變的tuple怎麼做?那就必須保證tuple的每一個元素本身也不能變。

 

參考慕課網課程:http://www.imooc.com/learn/177

 

Python入門基礎之list和tuple

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.