日常2: 群集資料 - 列表

群集資料 - 列表

群集資料也是C語言生活中的一個日常,諸如宣告陣列、使用linked list或者字串,這幾乎是每一個程式一定會碰觸到的資料型態,在python中因為無型別的關係,所以可以快速的組建列表,也有很厲害的內建功能,下面會提到一些常用的。

在C語言中要宣告一個陣列:

int a1[10];
int a2[3] = {1, 2, 3}
printf("%d %d %d", a2[0], a2[1], a2[2])

而python的列表,是不需要宣告大小的,多退少補。在使用上則和C語言的陣列沒有差別,也是0-indexed:

a1 = []
a2 = [1, 2, 3]
print(a2[0], a2[1], a2[2])

若是想要為a1添加元素則需要透過append或insert:

a1.append(100)
a1.insert(0, 99)

想知道列表的長度?

a1_len = len(a1)

想排序?想計數?想反轉?想當stack?通通辦的到。

a1.sort()
a1.count(99)
a1.reverse()
a1.pop()

甚至可以直接拿兩個列表做比較,這是C辦不到的。

a1 == a2

也因為python的列表沒有大小限制,所以可以直接做疊加,讓一個列表掛在列一個列表後面:

a1 += a2

而列表之間也支援彼此嵌套,可以列表裡面包列表,例如:

a3 = [a1, 100, "hello", a2]

在python中有一個關鍵字(in)可以判斷元素有沒有在列表中,不需要去使用count,可以使程式碼看起來更漂亮。

a1 in a3

列表支援最棒的功能是切片和comprehension,comprehension可以快速組建列表而切片可以將列表按需求拆開,以下例子示範將一個列表從i和j兩個索引拆成三段:

a = [n ** 2 for n in range(20)]
a1, a2, a3 = a[:4], a[4:10], a[10:]

Comprehension是python的一個強大功能,可以根據規則快速構建列表,能夠使用for和if之類的表達式,甚至可以用function pointer。function pointer的例子會在之後講解。示例的range(20)其實也是一個列表,代表[0, 1, 2, 3, ..., 19]。若要產生一個奇數列表可以這樣:

b = [n for n in range(10) if n % 2]

在列表的最後介紹一下python的indexing,python的群集資料支援從前頭開始數(0開始),也支援從後面開始數(-1開始),剛剛a1, a2, a3的例子換個寫法也是等價的:

a1, a2, a3 = a[:-16], a[-16:-10], a[-10:]

但從後面數最常用的case其實也只有取後幾個元素或取最後一個:

last_n = a[-n:]
last = a[-1]

results for ""

    No results matching ""