Python3集合set的入门练习

Python3集合set的入门练习
最新回答
思念满溢

2022-11-11 11:48:18

Python3集合set的入门练习总结如下:

1. 集合的特性
  • 去重性:集合自动去除重复元素,仅保留唯一值。
  • 无序性:集合元素无固定顺序,不可通过索引访问。
  • 可哈希性:集合元素必须是可哈希类型(如不可变类型:数字、字符串、元组等)。
  • 可迭代性:支持遍历操作(如for循环)。
2. 集合的初始化
  • 空集合:使用set()初始化,{}表示空字典(非空集合)。s1 = set() # 空集合s2 = set(range(5)) # {0, 1, 2, 3, 4}s3 = set([1, 2, 3]) # {1, 2, 3}s4 = set("I love Wayne the master") # 去重并拆分字符
3. 集合的修改
  • 添加元素

    add():添加单个元素(若已存在则不重复添加)。

    update():合并多个可迭代对象(如列表、元组、范围等),拆分元素后添加。

    s = {1, 2, 3}s.add("e") # {1, 2, 3, 'e'}s.update(range(5), ["a", "b"]) # {0, 1, 2, 3, 4, 'a', 'b', 'e'}
4. 集合的删除
  • 按元素删除

    remove(x):删除元素x,若不存在则抛出KeyError。

    discard(x):删除元素x,若不存在则不报错。

  • 随机删除

    pop():随机删除并返回一个元素(因无序性,结果不确定)。

  • 清空集合

    clear():清空所有元素。

    s = {1, 2, 3, "a"}s.remove(2) # {1, 3, 'a'}s.discard("b") # 无报错s.pop() # 随机删除(如返回1)s.clear() # set()
5. 集合的查询
  • 成员检测:使用in关键字,时间复杂度为O(1)(哈希表实现)。s = {1, 2, 3, "a"}print(2 in s) # Trueprint("b" in s) # False
  • 遍历元素:通过for循环迭代集合元素。for x in s: print(type(x), x) # 输出元素类型和值
6. 集合的效率对比
  • 查询效率:集合的in操作远快于列表(尤其数据量大时)。

    列表:线性结构,时间复杂度O(n)

    集合:哈希表结构,时间复杂度O(1)

    # 示例:10000个元素的查询对比a = list(range(10000)) # 列表b = set(range(10000)) # 集合%timeit -1 in a # 213 μs ± 1.34 μs%timeit -1 in b # 55.1 ns ± 0.394 ns
7. 可哈希类型与集合元素限制
  • 可哈希类型:不可变类型(如int、float、str、tuple、frozenset、None、bool)。
  • 不可哈希类型:可变类型(如list、dict、set)不能作为集合元素。s = {1, "a", (2, 3)} # 合法s = {[1, 2]} # 报错:列表不可哈希
8. 集合的数学操作(进阶)
  • 交集:s1 & s2 或 s1.intersection(s2)。
  • 并集:s1 | s2 或 s1.union(s2)。
  • 差集:s1 - s2 或 s1.difference(s2)。
  • 对称差集:s1 ^ s2 或 s1.symmetric_difference(s2)。s1 = {1, 2, 3}s2 = {2, 3, 4}print(s1 & s2) # {2, 3}print(s1 | s2) # {1, 2, 3, 4}
总结
  • 适用场景:需要去重、快速成员检测或数学集合操作时。
  • 注意事项

    集合无序,无法通过索引访问。

    元素必须是可哈希类型。

    修改操作(如add、update)会直接改变原集合。