1. 程式人生 > >【PY從0到1】第三節 列表

【PY從0到1】第三節 列表

# 3 列表

# 1> 下面這就是一個列表
aabbccdd = ['ee','ff','gg']
# 列表可以儲存資料,包含其中元素可以有很多,是可修改、有次序的。
# 下面展示一下兩套索引。
#              0     1    2
# aabbccdd = ['ee','ff','gg']
#              -3   -2   -1
# 可以用兩種方式抽取列表的元素,如下。
h = aabbccdd[0]
print(h)
i = aabbccdd[-2]
print(i)
# 對應的輸出結果如下
# ee
# ff
# 強調一點,索引從0開始。

# 2> 修改、新增和刪除列表中的元素

# 修改可以用下列語句,通俗的講應該叫替換。
aabbccdd[0] = 'kk'
print(aabbccdd)
# 輸出結果為:['kk', 'ff', 'gg']

# 新增元素可以使用下面的方法,預設新增到列表的最後一位。
aabbccdd.append('uu')
print(aabbccdd)
# 輸出結果為:['kk', 'ff', 'gg', 'uu']

# 習慣上,會先建立一個空列表。然後再用append()新增元素。

# 也可以使用方法insert()將元素插入到指定位置,具體如下。
aabbccdd.insert(1,'pp')
print(aabbccdd)
# 輸出結果為:['kk', 'pp', 'ff', 'gg', 'uu']

# 如果知道元素的索引,可以直接用del 刪除對應元素
del aabbccdd[0]
print(aabbccdd)
# 輸出結果為:['pp', 'ff', 'gg', 'uu']

# 使用pop()刪除元素,通俗講是叫提取。預設提取最後一個元素。
popped_aabbccdd = aabbccdd.pop(1)
print(aabbccdd)
print(popped_aabbccdd)
# 輸出結果為:
# ['pp', 'gg', 'uu']
# ff

# 如果知道元素名稱,可以用remove()直接刪除。
# remove()不具有提取功能。
# 如果列表中有重複的元素,方法remove()只刪除索引較小的那一個。
# 如果列表中有重複的元素就需要用if迴圈解決。
aabbccdd.append('gg')
print(aabbccdd)
aaccddee = aabbccdd.remove('gg')
print(aabbccdd)
print(aaccddee)
# 對應的結果如下:
# ['pp', 'gg', 'uu', 'gg']
# ['pp', 'uu', 'gg']
# None

# 3> 列表排序
# 用方法sort()對列表進行排序,可以永久改變列表順序。
aabbccdd.sort()
print(aabbccdd)
# 輸出結果為:['gg', 'pp', 'uu']
# 傳入reverse = True,可以相反順序排序。
aabbccdd.sort(reverse = True)
print(aabbccdd)
# 輸出結果為:['uu', 'pp', 'gg']
# 直接將列表傳入sorted()可以臨時改變列表排序,也同樣適用於方法reverse,語句如下。
# print(sorted(aabbccdd,reverse = True))
# 方法reverse()可以倒著列印列表,但可以隨時恢復到原來的順序,只需要再呼叫這個方法即可。
aabbccdd.reverse()
print(aabbccdd)
# 對應結果如下:['gg', 'pp', 'uu']

# 4> 確定列表長度
# 使用方法len()可以確定列表長度。
print(len(aabbccdd))
# 輸出結果為:3

# 5> 遍歷列表
# 下面重新定義一個新的列表
abc = ['a','b','c','d','e']
for cc in abc:
    print(cc)
# 簡單兩行程式碼就可以實現遍歷的功能,結果如下
# a
# b
# c
# d
# e
    
# 使用for時要注意後面有個冒號,如,for cc in abc:<----

# 6> 使用函式range()建立數值列表
# 可以使用list()和range()配合直接生成數值列表
numbers = list(range(1,10))
print(numbers)
# 注意,使用range()生成的數字是有頭無尾的,所以上述程式碼的結果如下。
# [1, 2, 3, 4, 5, 6, 7, 8, 9]

# 7> 對數字列表的簡單統計
# 使用方法max()、min()、sum()對列表秋最大值,最小值和總和
print(min(numbers))
print(max(numbers))
print(sum(numbers))
# 結果如下。
# 1
# 9
# 45

# 8> 列表切片
# 切片就是說提取列表的一部分,且不改變原列表。
# 基本形式是:[起始索引:終止索引],也遵循有頭無尾原則。
# 舉例如下。
print(numbers[:]) #又叫複製列表
print(numbers[2:8])
print(numbers[:8])
print(numbers[:-1])
print(numbers[2:])
# 結果如下
# [1, 2, 3, 4, 5, 6, 7, 8, 9]
# [3, 4, 5, 6, 7, 8]
# [1, 2, 3, 4, 5, 6, 7, 8]
# [1, 2, 3, 4, 5, 6, 7, 8]
# [3, 4, 5, 6, 7, 8, 9]
# 請讀者自行對比這五種切片的異同。

# 9> 元組
# 他是一種特殊的列表,規則限定其中的元素無法被改變,只能被再次賦值。
# 元組是用()表達
yuanzu1 = ('s','ss','sss')
yuanzu1['s'] = 'ssss'
# 這時,Python就會報錯,如下。
# TypeError: 'tuple' object does not support item assignment
# 可以看到元組裡的元素確實不能被修改。
# 但是對其做賦值操作是可以的。
yuanzu1 = ('s','ss','sss')
yuanzu1 = ('ssssss')
print(yuanzu1) 
# 結果為:ssssss

&n