Python 入門指南 - 串列

我們之前有簡單介紹過串列 (list) ,現在則是要進一步討論如何用串列製作密碼表




串列的字面常數 (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 則留言:

darkblack01 提到...

關於
「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]

darkblack01 提到...

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]

Unknown 提到...

d.append(x) 將 x 附加為 d 的最後一個元素
d.extend(L) 將 L 中的元素附加到 d 的最後
這兩項作用看來一模一樣?為何還有兩種不一樣的寫法,可否幫忙突破盲點?

Kaiching Chang 提到...

d.extend(L) 的 L 是複合資料型態,係指 L 中的所有元素都會附加到 d 之中,而 d.append(x) 的 x 為單一數值,只有一個數值會加入 d 內。