今天我們再來看 Python 裡一些簡單的容器 (Container)。容器可以持有任意數量的變數,方便寫程式的人存取一組變數,並且對這些變數做迭代(iteration)或遞迴(recursion)。常見的容器有 Lists、Dict(tionary)、Tuple。

Lists

Python lists 基本上就是其他語言裡的 Array。 Lists 特別的地方在於它可以擁有不同形態的變數,並且可以隨時修改大小。Python lists 裡其實有很多很特別的功能,就是可以對 List 定義一個區塊,並且做切割(slicing)。

P/S: Python 的 index 是從 0 開始哦~

l = [3,4,'this']
l[1]                    # 4
l.pop(2)                # "[3,4]"
l.append('dead')        # "[3,4,'dead']"
l[2] = 'beef'           # "[3,4,'beef']"
l.clear()               # "[]" (將 list 清空)
l = list(range(1,10))   # "[1,2,3,4,5,6,7,8,9]"
l[4:6]                  # "[5,6]"
l[:5]                   # "[1,2,3,4,5]"
l[5:]                   # "[6,7,8,9]"
l[:-2]                  # "[1,2,3,4,5,6,7]"
num = [4,6,2,5,3,1,9,8,7]
num.sort()                # "[1,2,3,4,5,6,7,8,9]"

Dict

Python dictionary 基本上跟 Java 裡的 Map 和 JavaScript 的 Object 很相似的容器。基本上一個 dict 會擁有一個 key,value pair。

d = {"Name": "BigBird",
     "Age": 34,
     87: True,
     "Languages": ['Python', 'JavaScript']}
print(d["Age"])                # "34"
print(d["Lang"][1])            # "JavaScript"
print("Name" in d)             # "True" (我們可以透過 in 來檢查 dict 裡面是否有這個 key)
d["Age"] = 87                  # {"Name": "BigBird", "Age":87, 87:True, "Languages": ['Python',
                               # 'JavaScript']}
del d["Age"]                   # {"Name": "BigBird", 87:True, "Languages": ['Python', 'JavaScript']}
                               # (刪除一組 key, value)
d.update([87: False])          # update 可以用來修改某個 key 裡面的值
d.update(["Food": "Potato"])   # 若是這個 key 不存在,它就會把它 append 到 dict 裡面

Tuple

Tuple 某種角度跟 Lists 非常相似,他們都是有順序的陣列。但是 Tuple 和 Lists 不同的地方在於宣告 Tuple 的值之後就不可以再更改(Immutable)。Tuple 也可以拿來當成 Dict 裡面的 Key 來使用哦~ 之後碰到深度學習相關的東西之後就會很常看到 Tuple 了。

d = {(x, x + 1): x for x in range(10)}  # 宣告一個以 tuple 為 key 的 dict
t = (5, 6)        # 宣告一個 tuple
print(type(t))    # "<class 'tuple'>"
print(d[t])       # "5"
print(d[(1, 2)])  # "1"
t[1] = 4          # 將會跳出錯誤 TypeError: 'tuple' object does not support item assignment

Leave a Reply

Your email address will not be published. Required fields are marked *