本系列文章配套代码获取有以下三种途径:
-
可以在以下网站查看,该网站是使用JupyterLite搭建的web端Jupyter环境,因此无需在本地安装运行环境即可使用,首次运行浏览器需要下载一些配置文件(大约20M):
https://returu.github.io/Python_Basic/lab/index.html
-
也可以通过百度网盘获取,需要在本地配置代码运行环境,环境配置可以查看【Python基础】2.搭建Python开发环境:
链接: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{1, 2, 4, 6, 7}
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(False, False)
13>>> set_1.issuperset(set_2) , set_1 >= set_2
14(False, False)
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 1, in <module>
7AttributeError: 'frozenset' object has no attribute 'add'
本篇文章来源于微信公众号: 码农设计师