master
/ 7.1.2可变集合类型的操作.ipynb

7.1.2可变集合类型的操作.ipynb @masterview markup · raw · history · blame

Notebook

7.2 可变集合类型的操作

可变集合提供了一些关于元素更新、删除等相关操作的方法,常用操作及其方法描述如下表所示。

方法 描述
s.add(x) 在集合 s 中添加对象 x。
s.remove(x) 从集合 s 中删除对象 x;如果 x 不是集合 s 中的元素(x not in s),将引发**KeyError 错误**
s.discard(x) 如果 x 是集合 s 中的元素,从集合 s 中删除对象 x,如果s中不存在x也不会报错。
s.pop() 无参数,从集合中移除并返回任意一个元素, 如果集合为空则会引发 KeyError。
s.clear() 删除集合 s 中的所有元素。

7.2.1 添加元素

**s.add(x)**

向集合 s 中添加一个元素 x 的方法只有一个s.add(x)

In [1]:
s = set('python')

s.add('c++')   # 字符串'1000'整体作为一个元素添加到集合中
print(s)
{'n', 'p', 'h', 't', 'y', 'c++', 'o'}

7.2.2 删除元素

1. **s.remove(x)**

从集合 s 中删除一个指定元素 x,当要删除的元素 x 在集合 s 中不存在时s.remove(x) **会触发KeyError异常**

In [3]:
s = set('python')
s.remove('p')
print(s)
{'n', 'h', 't', 'y', 'o'}

In [4]:
s = set('python')
s.remove('A')       # 集合s中不存在元素'A',将抛KeyError异常。
print(s)
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
/tmp/ipykernel_175/745977858.py in <module>
      1 s = set('python')
----> 2 s.remove('A')       # 集合s中不存在元素'A',将抛KeyError异常。
      3 print(s)

KeyError: 'A'

删除集合元素的remove方法在元素不存在时会引发KeyError错误,所以上面的代码中我们先通过成员运算判断元素是否在集合中。
使用s.remove(x) 删除元素时,建议**先做存在性测试**,以避免触发异常导致程序无法正常结束。

In [5]:
s = set('python')
if 'A' in s:
    s.remove('A')  # 若集合中存在元素A,删除'A',避免异常
print(s)
{'n', 'p', 'h', 't', 'y', 'o'}

2. **s.discard(x)**

功能与s.remove(x)类似,也是从集合 s 中删除一个指定元素 x。
但当要删除的元素 x 在集合 s 中不存在时s.discard(x)**不会触发异常**

In [6]:
s = set('python')
s.discard('p')
print(s)
s.discard('A')    # 集合s中不存在元素'A',但不会抛异常,集合s没有任何变化
print(s)
{'n', 'h', 't', 'y', 'o'}
{'n', 'h', 't', 'y', 'o'}

3. **s.pop()**

pop方法可以从集合 s 中随机删除一个元素,该方法在删除元素的同时会获得被删除的元素,其**返回值**是被删除的元素。

In [7]:
s = set('python')
x = s.pop()        # 从s中随机删除一个元素,返回被删除的元素赋值给x

print(x)
print(s)
n
{'p', 'h', 't', 'y', 'o'}

使用s.pop()方法时,如果**集合为空**则会触发**KeyError**

In [ ]:
s = set()  # s是空集合
s.pop()

4. **s.clear()**

s.clear()方法可用于删除集合的所有元素,清空集合,只**保留空集合对象**

In [18]:
city = {'北京', '上海', '广州', '深圳'}
city.clear()
print(city)
set()

5. **del 命令**

del 命令可用于**删除集合对象**
s.clear()的区别在于,del命令执行后,集合对象也会被删除,后续如果再调用该对象,将会抛NameError异常。

In [19]:
city = {'北京', '上海', '广州', '深圳'}
del city      # 集合对象city被删除
print(city)   # city对象已不存在,将抛NameError异常
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
/tmp/ipykernel_346/610532662.py in <module>
      1 city = {'北京', '上海', '广州', '深圳'}
      2 del city      # 集合对象city被删除
----> 3 print(city)   # city对象已不存在,将抛NameError异常

NameError: name 'city' is not defined
In [ ]: