额…..继续整理笔记,set集合方法等,下次不用到处乱翻了..常见的应该就这些了吧……心虚…..
1.概念
python中集合概念和数学中一致,由一个或多个确定的元素构成的整体叫集合.
集合中元素是唯一的,无序的,集合中元素为不可迭代对象,即非列表和字典.
python 中 set 集合分为 可变集合set()和不可变集合frozenset()两种
所以同样,set中元素也不能为一个set,但是可以是一个frozenset
set() 创建(可变集合)
用{}表示,类型为set(),与字典不同的是集合set内部是单独元素来表示,而非键值对的形式
>>> a = (
'a',
'b',
'v')
>>> b = set(a)
>>> b
{
'v',
'a',
'b'}
>>> type(b)
<
class 'set'>
>>> c = set() #创建空集合
>>> type(c)
<class 'set'>
2.set的方法
set.add (x)
添加元素
>>> b.add(
'bb')
>>> b
{
'v',
'a',
'bb',
'b'}
set.remove(x)
删除元素
>>> b.remove(
'bb')
>>> b
{
'v',
'a',
'b'}
set.update(set2)
将set b合并到set a中
>>> b
{
'v',
'a',
'b'}
>>> a = {
1,
2,
3}
>>> a
{
1,
2,
3}
>>> b.update(a)
>>> b
{
1,
'v',
'a',
2,
3,
'b'}
>>> a
{
1,
2,
3}
set.pop()
与列表pop和字典popitem方法类似,效果都是移除其中元素并返回移除元素的值
由于set集合和dict字典类似都是无序的,并且set中只有值无key,所以移除时为随机移除
>>> a
{
1,
2,
3}
>>>b = a.pop()
>>>b
1
>>>a
{
2,
3}
set.clear()
与列表和字典clear方法类似,效果都是清空内部元素,并保留空集合
>>> a.clear()
>>> a
set()
set.copy()
返回一个浅复制副本
>>> e = a.copy()
>>> e
{
1,
2,
3}
set.discard(obj)
和remove方法一样,都是移除set中的元素,
不同之处在于remove参数必须实际存在于set中,否则报错
而discard方法中,参数存在则移除,不存在也不会报错
>>> e
{
1,
2,
3}
>>> e.discard(
3)
>>> e
{
1,
2}
>>> e.discard(
3)
>>> e.remove(
3)
Traceback (most recent call last):
File
"<stdin>", line
1,
in <module>
KeyError:
3
3. frozenset() 不可变集合
顾名思义,不可变集合,就是不可更改的集合了,创建后就不可更改了,所以也就没有各种方法了.因此,frozenset做为可哈希对象,具有不可变特性,自然也就可以作为字典key
tag:
python中所有不可改变的的对象,如字符串,元组tuple,不可变集合frozenset都是可哈希的
同样也就是说,可改变的容器如字典dict,列表list,可变集合set 则不可哈希unhashable
>>> d = forzenset()
>>> d
forzenset()
>>> d.add(
1)
Traceback (most recent call last):
File
"<stdin>", line
1,
in <module>
AttributeError:
'frozenset' object has no attribute
'add'
>>> hash(d)
133156838395276
>>> hash(b)
Traceback (most recent call last):
File
"<stdin>", line
1,
in <module>
TypeError: unhashable type:
'set'
4.操作
和我们数学中学过的差不多,python中关于集合set的操作,一般有并集,交集,差集,对称差集子集,超集等
并集
union 或者 | (管道符)
>>> a = set([
1,
2,
3])
>>> a
{
1,
2,
3}
>>> b = set([
3,
4,
5])
>>> b
{
3,
4,
5}
>>> a.union(b)
{
1,
2,
3,
4,
5}
>>> a|b
{
1,
2,
3,
4,
5}
交集
intersection 或者 & (and符)
>>> a.intersection(b)
{
3}
>>> a & b
{
3}
差集
difference 或者 - (减号)
>>> a.difference(b)
{
1,
2}
>>> b.difference(a)
{
4,
5}
>>> a-b
{
1,
2}
>>> b-a
{
4,
5}
对称差集
symmetric_dfifference 或者 ^ 符 即除去交集部分
>>> a.symmetric_difference(b)
{
1,
2,
4,
5}
>>> a^b
{
1,
2,
4,
5}
子集
issubset 或 <
>>> d = {
1,
2}
>>> d.issubset(a)
True
>>> d<a
True
超集
issuperset 或 >
>>> a.issuperset(d)
True
>>> a>d
True