串列

  • 很適合用來追蹤順序,特別是其順序與內容可能會改變的時候。
  • 字串不可變,串列是可變的
  • 可以直接更改串列,加入新元素、刪除或改寫既有的元素
  • 串列中,同一個值可能會出現一次以上,裡面的值不一定是獨一無二
  • 如果只想要追蹤獨一無二的值,且不在乎順序,Python集合(set)比串列適合

建立串列【使用 [] 或 list()】

基本串列

  • 串列是由零個或多個元素組成的,以逗號分隔,並且被包在方框號裡面
  • 串列名稱 = ['字串', '字串', '字串', '字串']
>>> empty_list = [ ]
>>> weekdays = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
>>> big_birds = ['emu', 'ostrich', 'cassowary']
>>> first_names = ['Graham', 'John', 'Terry', 'Terry', 'Michael']

空串列【使用 list()】

  • 串列名稱 = list()
>>> another_empty_list = list()
>>> another_empty_list
[]

串列生成式

更多建立串列的方法,稱為串列生成式(在本書第四章 程式結構 p87

其他資料類型轉換成串列【使用 list()】

字串 → 轉換成一個單字元字串串列

  • list('字串') → ['a', 'b', 'c']
>>> list('cat')
['c', 'a', 't']

Tuple → 轉換成一個串列

  1. tuple = ('字串', '字串', '字串')
  2. list(tuple)
  3. ['字串', '字串', '字串']
>>> a_tuple = ('ready', 'fire', 'aim')
>>> list(a_tuple)
['ready', 'fire', 'aim']

字串 → 切割成一個串列【使用 split(/) 分割字串】

  • 字串.split('分隔符號')字串函式 → 將「一個字串」分解成「一個短字串的串列
  • 如果是字串名稱.split(沒有指定分隔符號),split()會使用空白字元:換行符號、空格、tab
  • 在本書第二章 p39

  • 字串名稱 = 'a/b/c'

  • 字串名稱.split(/)
  • ['a', 'b', 'c']
>>> birthday = '1/6/1952'
>>> birthday.split('/')
['1', '6', '1952']

原字串中有連續兩個以上的分隔字串 → 空字串【使用 split(/) 分割字串】

  1. 字串名稱 = 'a/b//c'
  2. 字串名稱.split('/')
  3. ['a', 'b', '', 'c']
>>> splitme = 'a/b//c/d///e'
>>> splitme.split('/')
['a', 'b', '', 'c', 'd', '', '', 'e']

原字串中有連續兩個以上的分隔字串 → 字串+分隔線【使用 split(//) 分割字串】

  1. 字串名稱 = 'a/b//c/d'
  2. 字串名稱.split('//')
  3. ['a/b', 'c/d']
>>> splitme = 'a/b//c/d///e'
>>> splitme.split('//')
['a/b', 'c/d', '/e']

取得一個項目【使用 [位移值]】

  • 如同字串,指定串列內某值的位移值,來將它取出
  • 如同字串,負的位移值會從結尾算回來
  • 位移值必須有效,指定開頭之前或結尾之後的位移值,將會看到例外(錯誤)

  • 字串名稱 = ['字串1', '字串2', '字串3']

  • 字串名稱[0]
  • '字串1'
>>> marxes = ['Groucho', 'Chico', 'Harppo']
>>> marxes[0]
'Groucho'
>>> marxes[1]
'Chico'
>>> marxes[2]
'Harppo'

>>> marxes[-1]
'Harppo'
>>> marxes[-2]
'Chico'
>>> marxes[-3]
'Groucho'

>>> marxes[5]
Traceback (most recent call last):
  File "<pyshell#217>", line 1, in <module>
    marxes[5]
IndexError: list index out of range

>>> marxes[-5]
Traceback (most recent call last):
  File "<pyshell#218>", line 1, in <module>
    marxes[-5]
IndexError: list index out of range

更改一個項目【使用 [位移值]】

  • 串列位移值必須是在串列中有效值
  • 字串是不可變的,所以無法用這種方式來變更字串內字元
  • 串列是可變的,可以變更串列內的項目數量及項目本身

  • 字串名稱 = ['字串1', '字串2', '字串3']

  • 字串名稱[1] = '字串a'
  • 字串名稱
  • ['字串1', '字串a', '字串3']
>>> marxes = ['Groucho', 'Chico', 'Harpo']
>>> marxes[2] = 'Wanda'
>>> marxes
['Groucho', 'Chico', 'Wanda']

以 Slice 取出項目【使用一個範圍的位移值】

  • slice 會包含位移值startend之前的那個字元。
    1. [:] 擷取整個序列,從開始到結束
    2. [start :] 指定從 start 到結束
    3. [: end] 指定從開始到 end 位移值減 1
    4. [start : end] 指定從 start 位移值到 end 位移值減 1
    5. [start : end : step] 會擷取從 start 位移值到 end 位移值減 1跳過 step 字元
  • slice 位移值
    • 開始:從 0、1 等往右移動
    • 結尾:從 -1、-2 等往左移動
    • 沒有指定:start 會使用 0,end 會使用 -1
    • end/step 是 -1 間隔值,會從結尾的地方開始,到start結束,不跳過任何字元

[:] = 0: = 整個字串

[start:]

從位移值 start 到結束。

[:end]

從開始到 end 位移值減 1

[start:end]

從 start 位移值到 end 位移值減 1

[start:end:step]

從位移值 start 到 end,間隔 step 個字元

[:end:step]

  • 從開始到位移值 end,間隔 step 個字元
  • 位移值 end 必須是實際位移值加一

[start::step]

  • 從位移值 start 到結束,間隔 step 個字元
  • -1的間隔值,會從結尾的地方開始,到start結束,不跳過任何字元

[::step] 只有間隔

  • 從開始到結束,間隔 step 字元(間隔 1 之外的大小)
  • -1的間隔值,會從結尾的地方開始,到開頭的地方結束,不跳過任何字元

[::-1] 串列反過來的技巧

  • 從開始到結束,間隔 step 字元(間隔 1 之外的大小)
  • -1的間隔值,會從結尾的地方開始,到開頭的地方結束,不跳過任何字元
>>> marxes = ['Groucho', 'Chico', 'Harpo']
>>> marxes[2] = 'Wanda'
>>> marxes
['Groucho', 'Chico', 'Wanda']

以 2 的間隔值往右移動

>>> marxes = ['Groucho', 'Chico', 'Harpo']
>>> marxes[0:2]
['Groucho', 'Chico']

從結尾開始,以 2 的間隔值往左移動

>>> marxes[::-2]
['Harpo', 'Groucho']

串列反過來的技巧

>>> marxes[::-1]
['Harpo', 'Chico', 'Groucho']

串列的串列

串列可以容納各種類型的元素,包括其他串列

  1. 串列名稱a = ['字串1', '字串2', '字串3']
  2. 串列名稱b = ['4', '字串5', '6']
  3. 串列名稱c = ['字串7', '字串8', '字串9']
  4. 串列名稱all = [串列名稱a, 串列名稱b, 串列名稱c]
  5. 串列名稱all
  6. [['字串1', '字串2', '字串3'], ['4', '字串5', '6'], ['字串7', '字串8', '字串9']]
>>> small_birds = ['hummingbird', 'finch']
>>> extinct_birds = ['dodo', 'passenger pigeon', 'Norweign Blue']
>>> carol_birds = [3, 'French hens', 2, 'tutledoves']
>>> all_birds = [small_birds, extinct_birds, 'macaw', carol_birds]

>>> all_birds
[['hummingbird', 'finch'], ['dodo', 'passenger pigeon', 'Norweign Blue'], 'macaw', [3, 'French hens', 2, 'tutledoves']]
>>>

指定項目

  1. 串列all[0]
  2. ['字串1', '字串2', '字串3']
>>> all_birds[0]
['hummingbird', 'finch']
>>> all_birds[1]
['dodo', 'passenger pigeon', 'Norweign Blue']

指定項目中的字元【使用 2 個以上的索引值】

  1. 串列all[0][1]
  2. '字串2'
>>> all_birds[1][0]
'dodo'

results matching ""

    No results matching ""