iT邦幫忙

2022 iThome 鐵人賽

DAY 3
0
Software Development

闖進Python異世界系列 第 3

[Day 03] 闖進Python異世界 - Methods of List

  • 分享至 

  • xImage
  •  

大家應該都聽說過Python有很豐富的函式庫吧!

沒錯,以列表來說就有高達10多個。

專屬於列表的函式,我們稱為列表的「方法」

今天就介紹幾個常用的函式與方法吧!


數值相關函式

  • max(list) :回傳列表中最大的數值
    • 注意:列表中的元素型態需皆為數字字串
  • min(list) :回傳列表中最小的數值
    • 注意:列表中的元素型態需皆為數字字串
  • sum(list) :回傳列表中所有數值的加總
    • 注意:列表中的元素型態需皆為數字

舉例說明:

a = [1,2,3,5,9,4] # create a list

print(max(a)) # 9
print(min(a)) # 1
print(sum(a)) # 24

增減元素的方法

  • list.append(obj) :將obj新增在列表最後面
    • 列表長度 + 1
  • list.insert(idx, obj) :將obj新增在列表於索引值idx的位置
    • 原本在索引值 >= idx的元素會被向後移
    • 列表長度 + 1
a = [1,2,3]
a.insert(2000, 50) # 新增在列表最末
a.insert(-2000, 60) # 新增在列表最前
  • list.remove(obj) :將列表中,第一個出現的obj移除
    • 原本在obj後的元素會被向前移
    • 列表長度 - 1
    • 如果obj不在列表中,會給出錯誤訊息(ValueError: list.remove(x): x not in list
  • list.pop(idx) :將索引值idx的元素移除
    • 原本在索引值 > idx的元素會被向前移
    • 列表長度 + 1
    • 如果idx為不合法的索引值,會給出錯誤訊息(IndexError: pop index out of range
  • list.clear() :將列表清空
    • 列表無元素
    • 列表長度 = 0

特殊功能的方法

  • list.sort() :將列表小到大排序
    • 這個方法可以放一些參數,如:key, reverse,有興趣者可以自行查閱
  • list.index(obj) :回傳obj的索引值
    • 如果obj不存在,會給出錯誤訊息(ValueError: obj is not in list
    • 如果存在多個obj,回傳第一次出現者的索引值
  • list.count(obj) :回傳obj的數量
  • list.copy() :回傳相同的列表

運算子

列表提供兩種運算子 +, *

列表加法:list1 + list2

list_a = [1,2,3]
list_b = ['a','b','c']
print(list_a + list_b) # [1, 2, 3, 'a','b','c']

列表乘法:list1 * n

list_a = [1,2,3]
print(list_a * 3) # [1, 2, 3, 1, 2, 3, 1, 2, 3]

複製列表

複製列表這個題目,你的直覺是怎麼解決?

一般人會這樣做:

list1 = [1,2,3]
list2 = list1
print(list1)
print(list2)

以結果來看,這兩個輸出確實相等

讓我們試著改變list2

list1 = [1,2,3]
list2 = list1
list2.append(200)
print(list1)
print(list2)

結果,兩個列表被同步改變了?!

為什麼?
因為這兩個變數指向的是同一個列表(同一塊記憶體)。

證明一下:

list1 = [1,2,3]
list2 = list1
print(id(list1))
print(id(list2))

註:id(obj)把它想成是obj在電腦裡面的地址
從輸出看來,這兩個列表確實是同一個

回歸問題,要怎麼複製列表?
list2 = list1.copy()


Slice

取得子列表的最佳途徑!

list1[0] 取的是一個元素。
使用 Slice list1[1:] 取的是很多個元素。

Slice 的語法是 list[start : end : step]

參數的使用與 range(start, end, step) 極為相似
回傳一個列表

舉一些例子:

list1 = [0,1,2,3,4,5,6,7]
print(list1[3:6]) # [3,4,5]
print(list1[1:7:2]) # [1,3,5]

特殊用法:

  • 複製列表:list2 = list1[:]
  • 翻轉列表:list1 = list1[::-1]

範例:

list1 = [0,1,2,3,4,5,6,7]
list2 = list1[:]
print(id(list1), id(list2))
list3 = list1[::-1]
print(list3)

Python真的很方便,許多函式、方法都已經被建立了!
但是如何正確使用才是最重要的。
下一篇來介紹Python的黑魔法:List Comprehension


上一篇
[Day 02] 闖進Python異世界 - List
下一篇
[Day 04] 闖進Python異世界 - List Comprehension
系列文
闖進Python異世界30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言