03-Python的数据类型2(集合set)
# 集合- set
- 集合定义:
- 集合就是一个无序不重复元素集,所有元素都包括在花括号里面,各个项用逗号隔开。
- 集合(set)是0个或多个对象引用的无序组合,这些对象所引用的对象都是可哈希运算的。
- 集合是可变的,因此可以很容易地添加或者移除数据项,但由于其中的项是无序的,因此没有索引位置的概念。
- 在集合中,任何元素都没有重复。
- 集合的常见操作:
- 创建集合:
- 可以通过调用集合的构造函数来创建集合。
- 要创建集合,必须使用set构造函数,
# 使用set构造函数注意: # set构造函数至多有一个参数 # 如果没有则会创建空集。 # 如果有一个参数,此参数必须可迭代,例如是字符串或列表。 s = set() print(s, type(s)) S = set("abcd") print(S, type(S)) # 如果只是用大括号定义,则定义的是一个dict 类型 s1 = {} print(s1, type(s)) # 大括号里一但有元素,否则是一个字典了 s2 = {1,2,3,4,5,6,7} print(s2, type(s))
# 结果 set() <class 'set'> {'c', 'b', 'a', 'd'} <class 'set'> {} <class 'set'> {1, 2, 3, 4, 5, 6, 7} <class 'set'>
- 添加元素
- 通过add(key)方法可以添加元素到set中,可以重复添加。
- set能过滤重复的元素。
# 过滤元素 s = set([1, 1, 3, 4, 5, 4, 6, 3]) print(s) # 添加元素 s.add(2) print(s)
# 结果 {1, 3, 4, 5, 6} {1, 2, 3, 4, 5, 6}
- 删除元素:
- 通过remove(key)方法可以删除元素。
- discard(key)也可以删除元素。
- clear()删除集合的所有元素。
s = {9,2,3,4,5,6, "s"} # 使用remove s.remove(4) print(s) # 使用discard # 如果删除元素不在集合中,discard不会报错。 s.discard(1) print(s) s.discard(9) print(s) # 使用clear(),使集合成为空集 s.clear() print(s)
# 结果 {2, 3, 5, 6, 9, 's'} {2, 3, 5, 6, 9, 's'} {2, 3, 5, 6, 's'} set()
- 典型集合函数
- len()、max()、min()
# len,max,min都一样使用 s = {1,2,3,4,5,6,7,8,9,1,1} print(len(s),max(s),min(s)) s1 = {"a", "b", "c"} print(min(s1)) # max()和min()仅用于特例 # 结果 9 9 1 a
- 数学集合运算:
- 交集:intersection()或者使用 & 符号
- 并集:union()
- 差集:difference()或者使用 - 符合
- 对称差:symmetric_difference()
- 子集:issubset()
- 超集: issuperset()
s1 = set([1, 2, 3]) s2 = set([1, 2, 3, 4, 5, 6]) # 交集 print(s1.intersection(s2)) # 并集 print(s1.union(s2)) # 差集 print(s1.difference(s2), s2.difference(s1)) # 其余的都类似操作 # 结果 {1, 2, 3} {1, 2, 3, 4, 5, 6} set() {4, 5, 6}
- 常用函数:
- s.copy():返回一个新集合,它是集合s的浅拷贝。
- s.update(t): 用t中的元素修改s,即s现在包含s或t的成员。
- s.intersection_update(t): s中的成员是公共属于s和t的元素。
- s.symmertric_difference_update(t): s中的成员更新为那些包含在s或t中,但不是s和t共有的元素。
- 常用运算符:
- in:判断某元素是否在集合中
- for:能遍历所有元素。
# for循环 s = {1,2,"i","love","Chian"} for i in s: print(i, end=" ") # 遍历多个值,限于元组 s = {(1,2,3),("i","love","China"),(4,5,6)} for k,m,n in s: print(k,"--",m,"--",n) for k in s: print(k)
# 结果 1 2 love i Chian i -- love -- China 4 -- 5 -- 6 1 -- 2 -- 3 ('i', 'love', 'China') (4, 5, 6) (1, 2, 3)
- 另外的一些操作
s = {1, 4, 5, 6, 8, 10} # 带条件 ss = {i for i in s if i % 2 == 0} print(ss) # 多循环 s1 ={1,2,3,4} s2 = {"i","love ","china"} s = {m*n for m in s2 for n in s1 if n == 2} print(s) # 结果 {8, 10, 4, 6} {'ii', 'chinachina', 'love love '}