Python基础讲义(九):集合类型

集合类型

0x01内容导图

0x02集合的特点

  • 无序,不可重复,可枚举,不可嵌套
  • 使用花括号(空字典用“{}”表示,空集合要使用set()的方式)
  • 集合对象本身可修改,但集合内的元素要求不可变
  • 集合底层实现也使用了哈希技术,集合可以被立即为只有键的字典
  • 简单示例
>>> s = {}									#空字典
>>> sa = set()								#空集合的正确表示
>>> sb = {1, 2, 3, 4}
>>> sc = {[1, 2], [3, 4]}					#集合元素要求可哈希
Traceback (most recent call last):
  File "<pyshell#68>", line 1, in <module>
    sc = {[1, 2], [3, 4]}
TypeError: unhashable type: 'list'
>>> sc = {(1, 2), (3, 4)}

0x03集合的常用操作

  • 集合运算

    • 交集:& or intersection函数
    • 并集:| or union函数
    • 差集:- or difference函数
    • 对称差:^ or symmetric_difference函数
    • 上述运算产生新的结果集,交、差、对称差有原地运算版(函数名后有update),并集的原地版是update函数

    • 子集/超集:<= or issubset函数,>= or issuperset函数
  • 添加元素:add函数

  • 删除元素:remove函数

  • 是否相交判断:isdisjoint函数,不相交为True,相交为False

  • 代码演示

>>> a = {1, 2, 3, 4, 5}
>>> b = {2, 4, 6, 8}
>>> a & b
{2, 4}
>>> a.union(b)
{1, 2, 3, 4, 5, 6, 8}
>>> a - b
{1, 3, 5}
>>> a ^ b
{1, 3, 5, 6, 8}
>>> a.symmetric_difference(b)
{1, 3, 5, 6, 8}
>>> c = a - b
>>> c.issubset(a)
True
>>> a.issuperset(c)
True
>>> 2 in a
True
>>> 8 in a
False
>>> a.isdisjoint(b)
False
#集合应用:去重
>>> >>> s = "asdfsgfjalfjaldfj"
>>> len(set(s))
7
>>> set(s)
{'f', 's', 'a', 'g', 'd', 'l', 'j'}
#集合修改
>>> a = set()
>>> a.add(3)
>>> a.add(5)
>>> a
{3, 5}
>>> a.remove(5)
>>> a
{3}

0x04高级内置函数

  • sorted排序函数:对可迭代对象,默认生成新的升序列表
>>> ls = [8, 7, 9, 11, 5]
>>> sorted(ls)				#生成新列表
[5, 7, 8, 9, 11]
>>> ls						#原列表不变
[8, 7, 9, 11, 5]
>>> ls.sort()				#列表本身的sort方法是原地排序,自身修改
>>> ls
[5, 7, 8, 9, 11]
>>> sorted(ls, reverse=True)		#降序排列
[11, 9, 8, 7, 5]
  • map映射函数:对可迭代对象每个函数执行映射操作
  • filter过滤函数:按条件选取可迭代对象中的元素
#将标准输入的字符串分割成字符串列表,然后对列表中的每个串执行int转换
>>> nums = map(int, input().split())	
12 5 10 8
>>> ls = list(nums)						#Python3返回的是map对象,可以用list转换函数
>>> ls
[12, 5, 10, 8]
>>> " ".join(map(str, ls))
'12 5 10 8'
>>> even = filter(lambda x : x % 2 == 0, ls)		#匿名函数后面介绍
>>> list(even)
[12, 10, 8]
  • zip函数:将多个可迭代对象,按索引位置打包为元组,再由这些元组构成新列表返回
>>> ptx = [1, 2, 3]				#x坐标列表
>>> pty = [2, 3, 4]				#y坐标列表
>>> pts = list(zip(ptx, pty))	#形成平面坐标点集
>>> pts
[(1, 2), (2, 3), (3, 4)]
  • max/min/sum函数:求最大值,最小值,求和
  • all函数:所有条件都满足;any函数:满足一个即可
  • enumerate(iter):迭代所有对象,并返回对象的索引号,即返回的是二元组(i, 对象)
ls = [19, 8, 7, 10]
for i, x in enumerate(ls):
    print(f"{i}:{x}")

0:19
1:8
2:7
3:10

0x05小结

  • 理解集合特点,熟悉集合使用场合
  • 熟练掌握集合常用操作并能灵活应用
  • 熟练掌握高级内置函数的使用
posted @ 2020-12-01 23:29  hzy&hmcj  阅读(139)  评论(0)    收藏  举报