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 '}

浙公网安备 33010602011771号