Python 第二章 集合

2.4 集合

1. 基本概念

集合:

  • 集合与字典类似,都是用 ‘{ }’ 括起来,但字典中的元素是键值对(key-value),而集合中的元素则是和列表(list)、元组(tuple)一样的单个值。
  • 集合中的元素都是不可变数据类型,如整数,浮点数,字符串,元组等。
  • 集合中的元素是不重复的唯一值。
  • 集合中的元素是无序的,添加顺序和在集合中的存储顺序不一样。
  • 只支持成员操作赋、for循环迭代、枚举。

2. 集合的创建、添加、删除、交集、并集、差集、超集、子集、判断是否相交

2.1 创建集合
     创建集合时我们可以先创建一个空字典,会用到 set() 函数,然后再添加元素。
例:

s1 = {1, 2, 3, 4, 5, 6, 6, 7}  # 集合中的元素不重复,会自动去重
print(s1, type(s1))

s2 = {}                # 定义空字典
print(s2, type(s2))

s3 = set([])
print(s3, type(s3))    # 定义空集合

输出:

{1, 2, 3, 4, 5, 6, 7} <class 'set'>
{} <class 'dict'>
set() <class 'set'>

进程已结束,退出代码 0

2.2 集合中添加元素

例1:s.add(b) 向集合 s 中添加一个元素 b

s = {'beijing', 'shanghai', 'guangzhou'}
s.add('shenzhen')
print(s, type(s))

输出:

{'shenzhen', 'shanghai', 'beijing', 'guangzhou'} <class 'set'>

进程已结束,退出代码 0

例2:s.update([a、b、c]) 向集合 s 中添加多个元素 a、b、c

s = {'beijing', 'shanghai', 'guangzhou'}
s.update(['shenzhen', 'hangzhou'])
print(s, type(s))

输出:

{'shanghai', 'beijing', 'shenzhen', 'hangzhou', 'guangzhou'} <class 'set'>

进程已结束,退出代码 0

2.3 集合中删除元素

例1:s.pop() 随机删除集合中的某个元素

s = {'beijing', 'shanghai', 'guangzhou', 'shenzhen', 'hangzhou'}
s.pop()
print(s, type(s))

输出:

{'shanghai', 'shenzhen', 'beijing', 'hangzhou'} <class 'set'>

进程已结束,退出代码 0

例2:s.remove(a) 删除集合 s 中指定元素 a

s = {'beijing', 'shanghai', 'guangzhou', 'shenzhen', 'hangzhou'}
s.remove('guangzhou')
print(s, type(s))

输出:

{'hangzhou', 'shanghai', 'shenzhen', 'beijing'} <class 'set'>

进程已结束,退出代码 0

2.4 集合的交集
     s.intersection(b) 或 s & b 都可以计算出集合 s 和 集合 b 的交集。
例:

s1 = {'beijing', 'shanghai', 'guangzhou', 'shenzhen', 'hangzhou'}
s2 = {'beijing', 'shanghai', 'hangzhou', 'wuhan', 'nanjing'}
print('交集:', s1.intersection(s2))
print('交集:', s1 & s2)

输出:

交集: {'hangzhou', 'shanghai', 'beijing'}
交集: {'hangzhou', 'shanghai', 'beijing'}

进程已结束,退出代码 0

2.5 集合的并集
     s.union(b) 或 s | b 都可以计算出集合 s 和 集合 b 的交集。
例:

s1 = {'beijing', 'shanghai', 'guangzhou', 'shenzhen', 'hangzhou'}
s2 = {'beijing', 'shanghai', 'hangzhou', 'wuhan', 'nanjing'}
print('交集:', s1.union(s2))
print('交集:', s1 | s2)

输出:

并集: {'wuhan', 'beijing', 'nanjing', 'hangzhou', 'shenzhen', 'shanghai', 'guangzhou'}
并集: {'wuhan', 'beijing', 'nanjing', 'hangzhou', 'shenzhen', 'shanghai', 'guangzhou'}

进程已结束,退出代码 0

2.6 集合的差集
     s.difference(b) 或 s - (s&b)都可以计算出集合 s 和 集合 b 的差集。
例:

s1 = {'beijing', 'shanghai', 'guangzhou', 'shenzhen', 'hangzhou'}
s2 = {'beijing', 'shanghai', 'hangzhou', 'wuhan', 'nanjing'}
print('差集:', s1.difference(s2))
print('差集:', s1 - (s1 & s2))

输出:

差集: {'shenzhen', 'guangzhou'}
差集: {'shenzhen', 'guangzhou'}

进程已结束,退出代码 0

2.7 集合的超集
     s.issuperset(b) 可以计算出集合 s 是否是集合 b 的超集,即集合 b 包含于集合 a,如果集合 a 和 b 相等则互为超集。
例:

s1 = {'beijing', 'shanghai', 'guangzhou', 'shenzhen', 'hangzhou'}
s2 = {'beijing', 'shanghai', 'hangzhou'}
print('超集:', s1.issuperset(s2))

输出:

超集: True

进程已结束,退出代码 0

2.8 集合的子集
     s.issubset(b) 可以计算出集合 s 是否是集合 b 的子集。
例:

s1 = {'beijing', 'shanghai', 'guangzhou', 'shenzhen', 'hangzhou'}
s2 = {'beijing', 'shanghai', 'hangzhou'}
print('子集:', s1.issubset(s2))
print('子集:', s2.issubset(s1))

输出:

子集: False
子集: True

进程已结束,退出代码 0

2.9 判断两集合是否相交
     s.isdisjoint(b) 可以判断集合 s 是否是集合 b 的是否不相交,不相交返回 False,相交返回 True。
例:

s1 = {'beijing', 'shanghai', 'guangzhou', 'shenzhen', 'hangzhou'}
s2 = {'beijing', 'shanghai', 'hangzhou'}
print('是否不相交:', s1.isdisjoint(s2))

输出:

是否不相交: False

进程已结束,退出代码 0

3. 集合特性

3.1 去重
     集合中的元素都是唯一的,因此可用来去掉重复值。
例:

s1 = [1, 2, 3, 3, 4, 5, 6, 6]
s2 = set(s1)
print(s2, type(s2))
print(list(s2), type(list(s2)))

输出:

{1, 2, 3, 4, 5, 6} <class 'set'>
[1, 2, 3, 4, 5, 6] <class 'list'>

进程已结束,退出代码 0

3.2 成员操作符
     a in b 判断元素 a 是否在集合 b 中。
例:

s1 = [1, 2, 3, 3, 4, 5, 6, 6]
print(1 in s1)

输出:

True

进程已结束,退出代码 0

3.3 迭代:for 循环
例:

s1 = [1, 2, 3, 3, 4, 5, 6, 6]
for i in s1:
    print(i)

输出:

1
2
3
3
4
5
6
6

进程已结束,退出代码 0

3.4 枚举:返回对应元素及其索引值
     enumerate()函数能返回集合中每个元素的下标和值,从而实现索引。
例:

s1 = [1, 2, 3, 3, 4, 5, 6, 6]
for index, value in enumerate(s1):
    print('索引:%s,值:%s' % (index, value))

输出:

索引:0,值:1
索引:1,值:2
索引:2,值:3
索引:3,值:3
索引:4,值:4
索引:5,值:5
索引:6,值:6
索引:7,值:6

进程已结束,退出代码 0
上一篇:最近肆虐传播的.beijing后缀勒索病毒是什么?文件被加密为.beijing后缀能否恢复?


下一篇:linux shell命令之paste