串列的字面常數 (literal) 為用中括弧圍起來的內容,同樣可以利用串列變數 (variable) 加中括弧存取裡頭的元素 (element) ,常見的操作如下表
操作 | 說明 |
---|---|
d[i] = x | 將索引值 i 的元素設定為 x |
d[i:j] = t | 將索引值 i 到 j 的元素設定為 t |
del d[i:j] | 刪除索引值 i 到 j 的元素 |
x in d | 判斷 x 是否為 d 的元素 |
x not in d | 判斷 x 是否非為 d 的元素 |
d + e | 合併 d 與 e 兩個串列 |
d * 5 | 將 d 中所有元素複製為 5 倍 |
del 為關鍵字 (keyword) 之一,用來刪除物件 (object) 。
以下為串列的常用方法 (method)
方法 | 說明 |
---|---|
d.append(x) | 將 x 附加為 d 的最後一個元素 |
d.extend(L) | 將 L 中的元素附加到 d 的最後 |
d.insert(i, x) | 將 x 插入 d 索引值為 i 的地方 |
d.remove(x) | 移除 d 中第一個 x 元素 |
d.pop([i]) | 取出 d 中索引值為 i 的元素,預設是最後一個 |
d.index(x) | 取得 d 中第一次出現 x 的索引值 |
d.count(x) | 累計 s 中 x 出現的個數 |
d.sort() | 排序 d 中的元素 |
d.reverse() | 倒轉 d 中元素的順序 |
串列還可以直接在中括弧中進行綜合運算 (comprehension) ,以此初始化串列元素,例如
d = [i for i in range(1, 5)] print() print(d) print() # 《程式語言教學誌》的範例程式 # http://pydoing.blogspot.com/ # 檔名:listdemo.py # 功能:示範 Python 程式 # 作者:張凱慶 # 時間:西元 2012 年 12 月
這樣 d 就會得到 1 、 2 、 3 、 4 等四個數字,執行結果如下
同樣的方式,我們也可以製作出按順序的 26 個英文小寫字母表,例如
code = [chr(i) for i in range(97, 123)] code_str = "".join(code) print() print(code_str) print() # 《程式語言教學誌》的範例程式 # http://pydoing.blogspot.com/ # 檔名:codedemo.py # 功能:示範 Python 程式 # 作者:張凱慶 # 時間:西元 2012 年 12 月
由於英文小寫字母 a 的編碼是 97 ,到 z 為 122 ,因此用 range() 取得 97 到 122 的整數,再用內建函數 chr() 將整數轉化為 Unicode 字元,這樣 code 中的元素就會是 "a" 、 "b" 然後一直到 "z"
code = [chr(i) for i in range(97, 123)]
然後我們用字串 (string) 的 join() 方法將 code 中的所有元素連接成一個字串
code_str = "".join(code)
最後就是印出這個字串,來執行看看結果吧
可是這是按照順序的英文小寫字母表,如果要用作密碼表,還需要攪亂一下順序才行。標準模組庫中 random 模組的 shuffle() 剛好有這樣的功能,所以我們要先 import random 囉!
中英文術語對照 | |
---|---|
串列 | list |
字面常數 | literal |
變數 | variable |
元素 | element |
關鍵字 | keyword |
物件 | object |
方法 | method |
綜合運算 | comprehension |
您可以繼續參考
軟體開發
相關目錄
回 Python 入門指南
回 Python 教材
回首頁
參考資料
http://docs.python.org/3.1/tutorial/datastructures.html
http://docs.python.org/3.1/library/stdtypes.html#sequence-types-str-bytes-bytearray-list-tuple-range
4 則留言:
關於
「d[i:j] = t 將索引值 i 到 j 的元素設定為 t」
我練習的結果如下:
b = [0, 1, 2, 3, 4, 5, 6]
print(b)
b[2:6] = 20
print(b)
output:
[0, 1, 2, 3, 4, 5, 6]
Traceback (most recent call last):
File "list.py", line 18, in
b[2:6] = 20
TypeError: can only assign an iterable
----------------------
b = [0, 1, 2, 3, 4, 5, 6]
print(b)
b[2:6] = [20]
print(b)
output:
[0, 1, 2, 3, 4, 5, 6]
[0, 1, 20, 6]
----------------------
b = [0, 1, 2, 3, 4, 5, 6]
print(b)
b[2:6] = "20"
print(b)
output:
[0, 1, 2, 3, 4, 5, 6]
[0, 1, '2', '0', 6]
d.pop([i]) 取出 d 中索引值為 i 的元素,預設是最後一個
練習如下:
b = ['3', '1', '4', '2', '0', '5', 6]
print(b)
b.pop([4])
print(b)
output:
['3', '1', '4', '2', '0', '5', 6]
Traceback (most recent call last):
File "list.py", line 66, in
b.pop([4])
TypeError: 'list' object cannot be interpreted as an integer
-------------
b = ['3', '1', '4', '2', '0', '5', 6]
print(b)
b.pop(4)
print(b)
output:
['3', '1', '4', '2', '0', '5', 6]
['3', '1', '4', '2', '5', 6]
d.append(x) 將 x 附加為 d 的最後一個元素
d.extend(L) 將 L 中的元素附加到 d 的最後
這兩項作用看來一模一樣?為何還有兩種不一樣的寫法,可否幫忙突破盲點?
d.extend(L) 的 L 是複合資料型態,係指 L 中的所有元素都會附加到 d 之中,而 d.append(x) 的 x 為單一數值,只有一個數值會加入 d 內。
張貼留言