Python的序列類型——List

來源:互聯網
上載者:User

標籤:info   app   round   http   soft   節點   連續   microsoft   支援   

                                         List

  列表 List,本質是一個鏈表,從鏈表的實現角度來講,鏈表的每一個結點都存放著值和指向下一個節點的指標。

因此鏈表在記憶體的儲存可以是不連續的,它是一種高效的資料結構。因此列表與字串的區別是列表可以進行任意

的修改。並且,列表的元素是任意的資料類型。當然,它支援迴圈、切片等多種操作。如果我們對列表進行切片,

那結果仍是一個列表。

         列表在對某個序列進行轉換的時候,內部是通過迴圈進行的,而數字不能作為迴圈的對象因此數字不能轉化

為列表;而當列錶轉化為字串的時候,字串函數將整個列表作為字串,這種做法讓字串變得醜陋,如果想

變得美觀可以自己寫迴圈解決。

1.  將字元  ==為列表

string = "abcdefg"print(list(string))

 

2.  列表 ==字串:使用for迴圈

li = [1,2,3,4,"I","love","you"]for i in li:    string = string + str(i)print(string)

 

3.   列表 ==字串:列表中只有字串時可使用join函數

li = ["I","love","you"]print("".join(li))

 

4.   聊聊extend(iterable)函數,該函數能擴充原列表,參數iterable是可迭代對象 

li = [1,2,3,4,"I","love","you"]li.extend([6,"here"])li.extend("abc")    #請注意和append的區別print(li)           #輸出:[1, 2, 3, 4, ‘I‘, ‘love‘, ‘you‘, 6, ‘here‘, ‘a‘, ‘b‘, ‘c‘]

註:與append相比,extend相當與在內部進行迴圈,再使用append函數往列表追加元素

 

5.   把列表當作堆棧使用

    用 append() 方法可以把一個元素添加到堆棧頂。用不指定索引的 pop() 方法可以把一個元素從堆棧頂釋放出來。

li = ["1","2","3","4","5"]li.append("6")print(li)          #輸出:[‘1‘, ‘2‘, ‘3‘, ‘4‘, ‘5‘, ‘6‘]del_li = li.pop()    #不加參數的popprint(del_li)       #擷取刪除的值:6print(li)          #顯示刪除結果:[‘1‘, ‘2‘, ‘3‘, ‘4‘, ‘5‘]

 

6.      把列表當作隊列使用

    我們也可以把列表當做隊列使用,隊列作為特定的資料結構,最先進入的元素最先釋放(先進先出)。不過,

列表這樣用效率不高。相對來說從列表末尾添加和彈出很快;在頭部插入和彈出很慢(因為,為了一個元素,要移

動整個列表中的所有元素)。要實現隊列,使用 collections.deque,它為在首尾兩端快速插入和刪除而設計。例如:

from collections import deque   #匯入 collections模組的deque函數li = ["Lily","Lynn Lee","John"]queue = deque(li)       #使用deque函數queue.append("Alger")   #往隊列插入資料           queue.popleft()         #刪除頭部print(queue)           #列印結果:deque([‘Lynn Lee‘, ‘John‘, ‘Alger‘])

 

7.      列表推導式

    列表推導式由包含一個運算式的括弧組成,運算式後面跟隨一個 for 子句,之後可以有零或多個 for 或 if 子句。

結果是一個列表,由運算式依據其後面的 for 和 if 子句上下文計算而來的結果構成。它的運算式的一般形式為:

[   運算式  for  [ if 子 句 ]    ]  。  下面將以簡單的例子說明列表推導式的作用。

7.1    產生列表中x的2次冪——

  • 不使用列表推導式
li = list(map(lambda x: x**2, range(10))) print(li)  #列印結果為:[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
  • 使用列表推導式
li = [x**2 for x in range(10)]print(li)  #列印結果為:[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

 

7.2    按兩個列表元素不同的條件產生座標——

  • 不使用列表推導式
li = []for x in [1,2,3]:    for y in [3,4,5]:        if x != y:            li.append((x, y))print(li)  #輸出:[(1, 3), (1, 4), (1, 5), (2, 3), (2, 4), (2, 5), (3, 4), (3, 5)]  
  • 使用列表推導式
li = [(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]print(li)  #輸出:[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]

  很顯然,列表推導式非常簡潔,增強程式的可讀性

  

  7.3    列表推導式的規範——

     列表推導式的一般形式為:[  運算式  for  [if子句]  ],在這裡運算式如果不是簡單的一條語句應該使用括弧括起來。

不用括弧括起來:報錯(語法錯誤)

[x, x**2 for x in range(6)]   #報錯  

     用括弧括起來:正常執行

from math import pili = [str(round(pi, i)) for i in range(1, 4)]print(li)   #輸出:[‘3.1‘, ‘3.14‘, ‘3.142‘]

 

  7.4    應用舉例:交換矩陣的行列——

mylist = [    [1, 2, 3, 4],    [5, 6, 7, 8],    [9, 10, 11, 12],    ]#第一個推導式擷取原矩陣的三行資料,然後對於每一行一次列印li = [ [row[i] for row in mylist] for i in range(4) ]print(li)   #輸出[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

 

  8.  其他常用函數總結如下:

 

 

 

 

 

 

 

 

Python的序列類型——List

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.