首页Python【Python基础】10....

【Python基础】10.集合(set)类型及其操作


本系列文章配套代码获取有以下三种途径:

  • 可以在以下网站查看,该网站是使用JupyterLite搭建的web端Jupyter环境,因此无需在本地安装运行环境即可使用,首次运行浏览器需要下载一些配置文件(大约20M):

https://returu.github.io/Python_Basic/lab/index.html
链接:https://pan.baidu.com/s/1x2Ynh_VibPY2u-HWTaJo8w?pwd=mnsj 提取码:mnsj
  • 前往GitHub详情页面,单击 code 按钮,选择Download ZIP选项:
https://github.com/returu/Python_Basic

—————————————————

1.集合的概念与创建:

集合类型与数学中集合的概念一致,即包含0个或若干个数据项的无须组合。

集合中元素不可重复且只能是不可变的数据类型(例如整数、浮点数、字符串、元祖等),列表、字典、集合数据类型不能作为集合元素出现。

因为集合要求元素不能重复,因为当需要对一维数据进行去重操作时,可以通过集合来完成。

1.1 创建集合:

使用或者set()函数或将一个或多个由逗号分隔的值放入花括号{}内的方式创建集合。

1>>> empty_set = set()
2>>> empty_set
3set()
4>>> numbers = {1 , 6 , 4 , 7 , 2}
5>>> numbers
6{12467}

1.2 将其他数据类型转换为集合:

使用set()函数可以将字符串、列表、元祖或者字典类型换换为集合,其中重复的值会被丢弃。

将字典作为参数传入set()函数时,只有字典的键值会被使用。

 1# 转换字符串
2>>> set('letter')
3{'e''l''r''t'}
4
5# 转换列表
6>>> set(['Python' , 'python' , 'Java'])
7{'Java''Python''python'}
8
9# 转换元祖
10>>> set(('Python' , 'python' , 'Java'))
11{'Java''Python''python'}
12
13# 转换字典
14>>> set({'山东':'济南' , '山西':'太原' , '河南':'郑州'})
15{'山东''山西''河南'}

1.3 集合类型也支持成员关系符(in)、长度计算函数(len()):

1>>> province = {'山东''山西''河南'}
2>>> len(province)
33
4>>'山东' in province
5True

1.4 集合类型不支持索引和切片操作:

由于集合是无序组合,因此没有元素位置的概念,因此不能进行索引和切片操作。

2.集合的操作函数或方法:

函数或方法 描述
s.add(x)
向集合s中添加元素x
s.pop()
随机返回集合s中的一个元素并删除,如果s为空,产生KeyError异常
s.remove(x) 如果元素x在集合s中,移除该元素,不在则产生KeyError异常
s.discard(x) 如果元素x在集合s中,移除该元素,不在不报错
s.clear()
移除集合s中的所有元素
s.isdisjoint(t)
如果集合s和集合t没有相同元素,返回True


 1>>> province = {'山东''山西''河南''湖南'}
2>>> province.add('福建')
3>>> province
4{'山东''山西''河南''湖南''福建'}
5>>> province.pop()
6'山西'
7>>> province
8{'山东''河南''湖南''福建'}
9>>> province.remove('河南')
10>>> province
11{'山东''湖南''福建'}
12>>> province.discard('湖北')
13>>> province
14{'山东''湖南''福建'}
15>>> province.isdisjoint({'海南''湖南'})
16False
17>>> province.clear()
18>>> province
19set()

3.集合类型的操作符:

函数或方法 描述
S-T 或 S.difference(T) 返回一个新集合,包括集合S中但不在集合T中的元素
S -= T 或 S.difference_update(T)
更新集合S,包括在集合S中但不在集合T中的元素
S & T 或 S.intersection(T) 返回一个新集合,包括同时在集合S和集合T中的元素
S &= T 或 S.intersection_update(T) 更新集合S,包括同时在集合S和集合T中的元素
S ^ T 或 S.symmetric_difference(T) 返回一个新集合,包括集合S和T中的元素,但不包含同时在集合S和T中的元素

S ^= T 或

 S.symmetric_difference_update(T)

新集合S,包括集合S和T中的元素,但不包含同时在集合S和T中的元素
S | T 或 S.union(T) 返回一个新集合,包括集合S和T中的所有元素
S |= T 或 S.union_update(T) 新集合S,包括集合S和T中的所有元素
S <= T 或 S.issubset(T) 如果集合S和T相同或者S是T的子集,返回True
S < T
如果集合S是T的子集,返回True
S >= T 或 S.issuperset(T) 如果集合S和T相同或者S是T的超集,返回True
S > T 如果集合S是T的集,返回True

上述操作符主要反映的是集合类型的4种基本操作。


 1>>> set_1 = {'山东''山西''河南'}
2>>> set_2 = {'山东''西藏''新疆'}
3>>> set_1.difference(set_2) , set_1 - set_2
4({'山西''河南'}, {'山西''河南'})
5>>> set_1.intersection(set_2) , set_1 & set_2
6({'山东'}, {'山东'})
7>>> set_1.symmetric_difference(set_2) , set_1 ^ set_2
8({'山西''新疆''河南''西藏'}, {'山西''新疆''河南''西藏'})
9>>> set_1.union(set_2) , set_1 | set_2
10({'山东''山西''新疆''河南''西藏'}, {'山东''山西''新疆''河南''西藏'})
11>>> set_1.issubset(set_2) , set_1 <= set_2
12(FalseFalse)
13>>> set_1.issuperset(set_2) , set_1 >= set_2
14(FalseFalse)


4.使用frozenset()函数创建不可变集合:

如果需要创建一个不可变的集合,可以使用任意可迭代参数调用frozenset()函数。

1>>> fs = frozenset(['Python' , 'python' , 'Java'])
2>>> fs
3frozenset({'Java''Python''python'})
4>>> fs.add('C++')
5Traceback (most recent call last):
6  File "<stdin>", line 1in <module>
7AttributeError: 'frozenset' object has no attribute 'add'


本篇文章来源于微信公众号: 码农设计师

RELATED ARTICLES

欢迎留下您的宝贵建议

Please enter your comment!
Please enter your name here

- Advertisment -

Most Popular

Recent Comments