欢迎来到我的博客园

python学习[第十二篇] 数据类型之 集合

python学习[第十二篇] 数据类型之 集合

集合概念

python中集合是一组无序排列的哈希值。集合分为两种可变集合(set)和不可变集合(frozenset)

对可变集合可以修改和删除元素,对于不可变集合不允许。可变集合是不可以哈希的,因此既不能用作字典的键,也不能做其他集合的元素。

集合的增删改查

集合的创建于赋值

集合与列表([]) 和字典({})不同,集合没有特别的语法格式。列表和字典可以通过他们自己的工厂方法创建,这也是集合的唯一的创建方式。set()和frozenset()

#创建可变集合
>>> s=set('fruittruth')
>>> s
set(['f', 'i', 'h', 'r', 'u', 't'])

#第二种方法是用{}
>>> x={1,2,3}
>>> type(x)
<type 'set'>
#创建不可变集合
>>> t=frozenset('fruittruth')
>>> t
frozenset(['f', 'i', 'h', 'r', 'u', 't'])
>>> type(s)
<type 'set'>
>>> type(t)
<type 'frozenset'>

 

访问集合

#判断对象是否在集合中
>>> 't' in s
True

#判断对象是否不在集合中
>>> 'k' not in s
True

#变量集合的元素
>>> for i in s:
...     print i
...
f
i
h
r
u
t

 

更新集合

使用集合的内建方法和操作符添加和删除集合的元素

#16b
#25b
#31
#42
#53b
#64
#75b
##16b

#集合添加元素
>>> s.add('k')
>>> s
set(['f', 'i', 'h', 'k', 'r', 'u', 't'])
#集合修改元素
>>> s.update('xyz')
>>> s
set(['f', 'i', 'h', 'k', 'r', 'u', 't', 'y', 'x', 'z'])
#集合删除元素 remove方法
>>> s.remove('t')
>>> s
set(['f', 'i', 'h', 'k', 'r', 'u', 'y', 'x', 'z'])
#通过 -= 删除集合 要删除的只能是集合,可以是可变集合和不可变集合
s -= set('xxx')
>>> s -= set('xyz')
>>> s
set(['f', 'i', 'h', 'k', 'r', 'u'])
>>> s -= t
>>> s
set(['k'])

>>> s -= 'xyz'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for -=: 'set' and 'str'

删除集合

del s

 

集合类型操作符

标准类型操作符

成员关系 in ,not in

>>> s=set('pzq')
>>> s
set(['q', 'p', 'z'])
>>>
>>> 'k' in s
False

集合等价及不等价

>>> s=set('pzq')
>>> s
set(['q', 'p', 'z'])
>>> t=frozenset('mon')
>>> t
frozenset(['m', 'o', 'n'])
>>> s == t
False
>>> s != t
True
>>> u=frozenset(s)
>>> u
frozenset(['q', 'p', 'z'])
>>> s == u
True
>>> set('posh') == set('shop')
True

子集及超集

集合子集及超集 :小于符号(<,<=)用来表示子集 大于符号(>,>=)用来表示超集.

 

集合类型操作符(所有类型操作符:可变可不变) 对等号左边集合直接进行修改

联合操作符 |

交集操作符 &

差集操作符 -

对称差分 ^

>>> x=set(['xxx','yyy'])
>>> x
set(['xxx', 'yyy'])
>>> y=set(['xxx','zzz'])
>>> y
set(['xxx', 'zzz'])
>>> x|y
set(['xxx', 'yyy', 'zzz'])
>>> x&y
set(['xxx'])
>>> x-y
set(['yyy'])
>>> y-x
set(['zzz'])
>>> x^y
set(['yyy', 'zzz'])

 

 集合类型操作符(所有类型操作符:可变集合)

(union)update |= 更新方法从已存在的集合中添加一个或多个成员同update()等价

Retention/Intersection update &= 保留与其他集合共有的成员 和intersecion_update()等价

Difference update -= 差更新操作 ,删除共同存在的元素后返回的集合, difference_update()等价

Symmetric difference update ^= 等差操作返回的集合 和 symmetric_difference_update()等价

# 操作符 l=
>>> x = set(['xxx','yyy'])
>>> y = set(['xxx','zzz'])
>>> x,y
(set(['xxx', 'yyy']), set(['xxx', 'zzz']))
>>> x |= y
>>> x,y
(set(['xxx', 'yyy', 'zzz']), set(['xxx', 'zzz']))
# 操作符 &=
>>> x = set(['xxx','yyy'])
>>> y = set(['xxx','zzz'])
>>> x,y
(set(['xxx', 'yyy']), set(['xxx', 'zzz']))
>>> x &= y
>>> x,y
(set(['xxx']), set(['xxx', 'zzz']))
#操作符 -=
>>> x = set(['xxx','yyy'])
>>> y = set(['xxx','zzz'])
>>> x,y
(set(['xxx', 'yyy']), set(['xxx', 'zzz']))
>>> x -= y
>>> x,y
(set(['yyy']), set(['xxx', 'zzz']))
>>>
#操作符 ^=
>>> x = set(['xxx','yyy'])
>>> y = set(['xxx','zzz'])
>>> x,y
(set(['xxx', 'yyy']), set(['xxx', 'zzz']))
>>> x ^= y
>>> x,y
(set(['yyy', 'zzz']), set(['xxx', 'zzz']))

 

内建函数

标准类型内建函数 

len() 返回集合的基数

type() 返回参数类型

str() 转为字符串

repr() 转为python字符串

集合类型工厂函数

set() 生成可变类型集合

frozenset() 生成不可变类型集合

集合类型内建方法

所有集合的方法

s.issubset(t) 判断是是否是t的子集

s.issuperset(t) 判断s是否是t的超集

s.union(t) 返回一个新的集合 ,是s和t的并集

s.intersecion(t) 返回一个新的集合,是s和t的差集

s.defference(t) 返回一个新的集合,是s的成员,但不是t的成员

s.symmetric_difference(t) 返回一个新的集合 ,是s或t的成员,但不是s和t的共有成员

s.copy()

#判断是否是超集和子集
>>> s=set(['xxx'])
>>> t=set(['xxx','yyy'])
>>> s,t
(set(['xxx']), set(['xxx', 'yyy']))
>>> s.issubset(t)
True
>>> t.issuperset(t)
True
#集合的交集并集差集,对称差
>>> s=set(['xxx','zzz'])
>>> t=set(['xxx','yyy'])
>>> s,t
(set(['xxx', 'zzz']), set(['xxx', 'yyy']))
>>> s.union(t)
set(['xxx', 'yyy', 'zzz'])
>>> s.intersection(t)
set(['xxx'])
>>> s.difference(t)
set(['zzz'])
>>> s.symmetric_difference(t)
set(['yyy', 'zzz'])

 

可变集合的方法

基础的增删改查

s.add(obj)

s.remove(obj)

s.discard(obj)

s.pop()

s.clear()

#基础的增删改查
>>> s=set(['xxx'])
>>> s
set(['xxx'])
#添加的对象必须是可hash的,不可以是列表
>>> s.add(['zzz'])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
>>> s
set(['xxx'])
#元组可以hash加入成功
>>> s.add(('zzz'))
>>> s
set(['xxx', 'zzz'])
#remove方法如果删除的子集不存在会报keyerror
>>> s.remove(('z'))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'z'
#discard 方法 子集不存在的话不会报keyerror
>>> s.discard(('z'))
>>> s
set(['xxx', 'zzz'])
#pop返回第一个自己并删除
>>> s.pop()
'xxx'
>>> s
set(['zzz'])
#clear 清空集合
>>> s.clear()
>>> s
set([])

集合的交集并集差集

s.update(t)

s.intersection_update(t)

s.defference_update(t)

s.symmetric_difference_update(t)

>>> s = set(('xxx','zzz'))
>>> t = set(['xxx','yyy'])
>>> s, t
(set(['xxx', 'zzz']), set(['xxx', 'yyy']))
>>> s.update(t)
>>> s, t
(set(['xxx', 'yyy', 'zzz']), set(['xxx', 'yyy']))

>>> s = set(('xxx','zzz'))
>>> t = set(['xxx','yyy'])
>>> s, t
(set(['xxx', 'zzz']), set(['xxx', 'yyy']))
>>> s.intersection_update(t)
>>> s, t
(set(['xxx']), set(['xxx', 'yyy']))

>>> s = set(('xxx','zzz'))
>>> t = set(['xxx','yyy'])
>>> s, t
(set(['xxx', 'zzz']), set(['xxx', 'yyy']))
>>> s.difference_update(t)
>>> s, t
(set(['zzz']), set(['xxx', 'yyy']))

>>> s = set(('xxx','zzz'))
>>> t = set(['xxx','yyy'])
>>> s, t
(set(['xxx', 'zzz']), set(['xxx', 'yyy']))
>>> s.symmetric_difference_update(t)
>>> s, t
(set(['yyy', 'zzz']), set(['xxx', 'yyy']))

 

#####end

posted @ 2018-07-19 00:13  panzq  阅读(283)  评论(0编辑  收藏  举报