Python札记10_集合set

浏览: 852

集合setPython中的另一种数据类型,用{ }括起来表示,里面是单个的对象,不是键值对。集合的特点是里面的元素有的可变,有的不可变;元素无次序,元素不可重复。集合set可以说是列表和字典的杂合。

  • 元素无序
  • 元素是不可变,可哈希的
  • 自动去重
  • 集合没有索引,不属于序列
  • 空集合只能通过set()方法进行创建

创建集合set

创建集合有两种方式:

  • 通过set()函数创建
  • 通过{ }直接进行创建
  • 创建空集合一定要用set方法,否则Python会认为是字典

set创建

如果有重复的元素会自动进行过滤,一种高效的去重方式:

s1 = set("peter")
print(s1)

{'p', 't', 'e', 'r'}

{ }创建


同样的会自动去重创建,由于{ }已经使用在字典中,不建议使用

s2 = {"p", "e", "t", "e", "r"}
print(s2)

{'t', 'r', 'e', 'p'}

frozenset()

通过set创建的集合都是可变,不可哈希的集合;通过frozenset创建的是不可变的集合

哈希和不可哈希

哈希hashable:不可变的,例如字符串、整数型、布尔值等,字典的键必须是不可变的
不可哈希unhashable:可变的,例如列表、字典等,利用set()创建的集合是可变集合


集合set的方法

方法作用
add()给一个集合增加元素,参数只能有一个:集合与元素
update用原有集合自身个其他东西构成的新集合,来更新原来的集合
pop随机删除一个元素,返回元素本身;不能指定参数,不能指定删除某个元素
remove(obj)obj必须是集合set中的元素,否则报错;没有返回值
discard(obj)obj如果在集合中就执行删除,否则不进行任何操作,与remove不同
clear()删除所有元素,bool(set)为False

# add
s3 = set()
s3.add("peter") # 一次只能增加一个元素
print(s3)
s4 = set("python")
s4.add("xiaoming")
# s4.add('[1, 2, 3]') 报错:列表是可变,不可哈希的;但集合中的元素必须是不可变的,可哈希的
print(s4)

{'peter'}
{'h', 'p', 'o', 't', 'y', 'xiaoming', 'n'}

# update
s3.update(s4) # 将s4中的元素合并到s3中
print(s3)

{'n', 'xiaoming', 'peter', 'y', 'p', 'h', 't', 'o'}

s4.update("goo")
print(s4)

{'xiaoming', 'y', 't', 'p', 'g', 'h', 'n', 'o'} # 注意结果的去重

s4.update((2, 3))
print(s4)

{2, 3, 't', 'g', 'xiaoming', 'p', 'n', 'h', 'y', 'o'}

集合运算

  • 元素和集合关系:判断元素是否在集合中:in
  • 集合与集合的关系:
  1. 两个集合是否相等 ==
  2. 超集B.issuperset(A)、 B>A和子集A.issubset(B)A<B关系
  3. 并集:A.union(B)或者使用|:得到新的集合,原来的集合不变
  4. 交集:A.intersection(B)或者使用&
  5. 差集:A.difference(B)或者A-B,(A中存在,B中不存在的元素)
  6. 对称差集:A.symmetric_difference(B),(A,B的并集除去A,B的交集)
推荐 0
本文由 皮大大 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册