Skip to content

Latest commit

 

History

History
213 lines (146 loc) · 5.27 KB

File metadata and controls

213 lines (146 loc) · 5.27 KB

set 删除

要从 Python 的 set 中删除元素,常用以下几种方法:

s = {1, 2, 3, 4, 5}

1. remove(elem)

  • 用法s.remove(x)
  • 如果元素 x 存在于集合中,则将其删除;若不存在,则抛出 KeyError
s.remove(3)
print(s)   # {1, 2, 4, 5}

s.remove(10)  
# KeyError: 10

2. discard(elem)

  • 用法s.discard(x)
  • 如果元素 x 在集合中,则删除;否则什么也不做,不会报错。
s.discard(4)
print(s)   # {1, 2, 5}

s.discard(10)  
# 不会抛错,集合保持不变

3. pop()

  • 用法s.pop()
  • 随机删除并返回集合中的一个“任意”元素(因为集合无序),若集合为空则抛出 KeyError
elem = s.pop()
print("删除了:", elem)
print("剩余:", s)

empty = set()
empty.pop()  
# KeyError: 'pop from an empty set'

4. clear()

  • 用法s.clear()
  • 一次性移除集合中 所有 元素,使其变为空集合。
s.clear()
print(s)   # set()

小结

方法 删除行为 元素不存在时的表现
remove(x) 删除元素 x 抛出 KeyError
discard(x) 删除元素 x 无操作,不报错
pop() 随机删除并返回一个元素 若空集合抛出 KeyError
clear() 删除集合中所有元素 始终安全,无报错

根据需求选择合适的方法:

  • 若要确保元素必须存在,可用 remove()
  • 若元素可能不存在且不想处理异常,可用 discard()
  • 若要随机取出并删除一个元素,可用 pop()
  • 若要清空整个集合,可用 clear()

字典使用==运算符

  1. 使用 == 运算符 python Copy Edit a = {'x': 1, 'y': 2} b = {'y': 2, 'x': 1}

print(a == b) # True 只要 键集合相同,且对于每个键,a[key] == b[key],就认为两个字典相等。

插入顺序不同并不影响结果(Python 3.7+ 字典保留插入顺序,但比较时仍不考虑顺序)。

在 Python 中,对内置序列(如列表 list、字符串 str、元组 tuple)进行切片操作本质上是“复制”出一个新的序列片段,所以其时间和空间开销都与切出的元素个数成正比。

时间复杂度 列表切片 lst[a:b] 需要遍历并复制从索引 a 到 b-1 的每一个元素,时间复杂度为

𝑂(𝑘) O(k) 其中 𝑘=max(0,𝑏−𝑎) k=max(0,b−a) 是切片长度。

字典删除

在 Python 中,从字典(dict)中删除元素常用以下几种方法:

d = {'a': 1, 'b': 2, 'c': 3}

1. del 语句

  • 用法del d[key]
  • 如果 key 存在,就删除对应的键值对;否则抛出 KeyError
del d['b']
print(d)   # {'a': 1, 'c': 3}

del d['x']
# KeyError: 'x'

2. pop(key[, default])

  • 用法value = d.pop(key)value = d.pop(key, default)

  • 删除并返回对应的值;

    • 如果 key 不存在且没有提供 default,会抛出 KeyError
    • 如果提供了 default,则在键不存在时返回 default,且不抛错。
v = d.pop('c')
print(v)    # 3
print(d)    # {'a': 1}

v2 = d.pop('x', 'not found')
print(v2)   # 'not found'
print(d)    # {'a': 1}

3. popitem()

  • 用法key, value = d.popitem()
  • 随机(Python 3.7+ 中是“最后插入”)删除并返回一对 (key, value);字典为空时抛出 KeyError
d = {'a': 1, 'b': 2, 'c': 3}
k, v = d.popitem()
print((k, v))  # 例如 ('c', 3)
print(d)       # {'a': 1, 'b': 2}

empty = {}
empty.popitem()
# KeyError: 'popitem(): dictionary is empty'

4. 字典推导(过滤删除多项)

  • 用法:通过字典推导创建一个不含特定键的新字典。
d = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
# 删除所有值为偶数的项
d = {k: v for k, v in d.items() if v % 2 != 0}
print(d)   # {'a': 1, 'c': 3}

5. clear()

  • 用法d.clear()
  • 删除字典中所有键值对,将其变成空字典。
d.clear()
print(d)   # {}

各方法对比

方法 行为 键不存在时 返回值
del d[key] 删除指定键 抛出 KeyError 无(返回 None
d.pop(key) 删除并返回指定键的值 抛出 KeyError 被删除的值
d.pop(key, default) 删除并返回指定键的值 返回 default 值或 default
d.popitem() 删除并返回最后插入的键值对 抛出 KeyError (key, value) 元组
字典推导 重新构造新字典,可批量“删除”符合条件的项 —— 新的字典
d.clear() 删除所有键值对 —— 无(返回 None

根据你的具体需求(单一删除、带默认值删除、批量过滤、或一次性清空),选用最合适的方法即可。如需更多示例或有其他场景,请随时告诉我!