Python remove() - List 刪除元素
remove() 方法用來移除 list 中第一個符合的元素。
基本用法
fruits = ["apple", "banana", "orange"]
fruits.remove("banana")
print(fruits) # ['apple', 'orange']
語法
list.remove(element)
element:要移除的元素- 回傳:None(直接修改原 list)
- 例外:找不到元素時拋出 ValueError
只移除第一個符合的元素
numbers = [1, 2, 3, 2, 4, 2]
numbers.remove(2)
print(numbers) # [1, 3, 2, 4, 2](只移除第一個 2)
元素不存在時會報錯
fruits = ["apple", "banana"]
# 會拋出 ValueError
# fruits.remove("orange") # ValueError: list.remove(x): x not in list
# 安全的做法:先檢查
if "orange" in fruits:
fruits.remove("orange")
# 或使用 try-except
try:
fruits.remove("orange")
except ValueError:
pass # 元素不存在,忽略
移除所有符合的元素
numbers = [1, 2, 3, 2, 4, 2]
# 使用 while 迴圈
while 2 in numbers:
numbers.remove(2)
print(numbers) # [1, 3, 4]
# 或使用 list comprehension(建立新 list)
numbers = [1, 2, 3, 2, 4, 2]
numbers = [n for n in numbers if n != 2]
print(numbers) # [1, 3, 4]
remove() vs pop()
fruits = ["apple", "banana", "orange"]
# remove() - 依值移除
fruits.remove("banana")
print(fruits) # ['apple', 'orange']
# pop() - 依索引移除,並回傳被移除的元素
fruits = ["apple", "banana", "orange"]
removed = fruits.pop(1)
print(removed) # banana
print(fruits) # ['apple', 'orange']
remove() vs del
fruits = ["apple", "banana", "orange"]
# remove() - 依值移除
fruits.remove("banana")
# del - 依索引移除
fruits = ["apple", "banana", "orange"]
del fruits[1]
print(fruits) # ['apple', 'orange']
實際範例
移除特定項目
shopping_list = ["milk", "bread", "eggs", "butter"]
# 買完後移除
shopping_list.remove("bread")
print(shopping_list) # ['milk', 'eggs', 'butter']
過濾黑名單
users = ["alice", "bob", "charlie", "david"]
blacklist = ["bob", "david"]
for user in blacklist:
if user in users:
users.remove(user)
print(users) # ['alice', 'charlie']
安全移除函數
def safe_remove(lst, value):
try:
lst.remove(value)
return True
except ValueError:
return False
numbers = [1, 2, 3]
print(safe_remove(numbers, 2)) # True
print(numbers) # [1, 3]
print(safe_remove(numbers, 5)) # False
移除重複元素(保持順序)
def remove_duplicates(lst):
seen = set()
result = []
for item in lst:
if item not in seen:
seen.add(item)
result.append(item)
return result
numbers = [1, 2, 2, 3, 3, 3, 4]
unique = remove_duplicates(numbers)
print(unique) # [1, 2, 3, 4]
迴圈中移除元素的陷阱
在迴圈中移除元素時要小心:
# 錯誤:會跳過元素
numbers = [1, 2, 3, 4, 5]
for n in numbers:
if n % 2 == 0:
numbers.remove(n)
print(numbers) # [1, 3, 5](這個例子剛好正確,但不安全)
# 更危險的例子
numbers = [2, 2, 2, 2]
for n in numbers:
numbers.remove(n)
print(numbers) # [2, 2](只移除了一半!)
安全的做法:
# 方法 1:複製 list 後迭代
numbers = [2, 2, 2, 2]
for n in numbers[:]: # 使用 [:] 複製
numbers.remove(n)
print(numbers) # []
# 方法 2:使用 list comprehension
numbers = [1, 2, 3, 4, 5]
numbers = [n for n in numbers if n % 2 != 0]
print(numbers) # [1, 3, 5]
# 方法 3:倒序迭代
numbers = [1, 2, 3, 4, 5]
for i in range(len(numbers) - 1, -1, -1):
if numbers[i] % 2 == 0:
numbers.remove(numbers[i])
print(numbers) # [1, 3, 5]
時間複雜度
remove() 的時間複雜度是 O(n),因為需要搜尋元素並移動後續元素。