python类型-集合

Posted MrLayflolk

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python类型-集合相关的知识,希望对你有一定的参考价值。

集合对象是一组无序排列的可哈希的值,集合成员可以做字典的键。集合有两种类型:可变集合,可以添加和删除元素,可变集合不是可哈希的,不能用作字典的键也不能作为其它集合中的元素;不可变集合相反,有哈希值,可用作字典的键或作为集合中的一个成员。

1.创建集合类型和给集合赋值

集合创建的唯一方法-用集合的工厂方法set()和frozenset()

 1 >>> s = set(\'cheeseshop\')
 2 >>> s
 3 set([\'c\', \'e\', \'h\', \'o\', \'p\', \'s\'])
 4 >>> t = frozenset(\'bookshop\')
 5 >>> t
 6 frozenset([\'b\', \'h\', \'k\', \'o\', \'p\', \'s\'])
 7 >>> type(s)
 8 <type \'set\'>
 9 >>> len(s)
10 6
11 >>> len(t) == len(s)
12 True
13 >>> s == t
14 False

2.访问集合中的值

可以遍历查看集合成员或检查某项元素是否是一个集合中的成员。

1 >>> s
2 set([\'c\', \'e\', \'h\', \'o\', \'p\', \'s\'])
3 >>> \'k\' in s
4 False
5 >>> for i in s:
6 ... print i,
7 ...
8 c e h o p s

3.更新集合

用各种集合内建的方法和操作符添加和删除集合的成员。

 1 >>> s
 2 set([\'c\', \'e\', \'h\', \'o\', \'p\', \'s\'])
 3 >>> s.add(\'z\')
 4 >>> s
 5 set([\'c\', \'e\', \'h\', \'o\', \'p\', \'s\', \'z\'])
 6 >>> s.update(\'pypi\')
 7 >>> s
 8 set([\'c\', \'e\', \'i\', \'h\', \'o\', \'p\', \'s\', \'y\', \'z\'])
 9 >>> s.remove(\'z\')
10 >>> s
11 set([\'c\', \'e\', \'i\', \'h\', \'o\', \'p\', \'s\', \'y\'])
12 >>> s -= set(\'pypi\')
13 >>> s
14 set([\'c\', \'e\', \'h\', \'o\', \'s\'])

4.删除集合

令集合超出它的作用范围,或调用del将他们直接清除出当前的名称空间。

1 >>> del s

5.集合类型操作符

5.1.标准类型操作符(所有的集合类型)

成员关系(in,not in):某个元素是否是一个集合中的成员;

集合等价/不等价:两个集合相等是指对每个集合而言,当且仅当其中一个集合中的每个成员同时也是另一个集合中的成员,也可以说每个集合必须是另一个集合的子集,即s<=t和t<=s的值均为真(True),集合等价/不等价与集合的类型或集合成员的顺序无关,只与集合的元素有关。

1 >>> s
2 set([\'c\', \'e\', \'h\', \'o\', \'p\', \'s\'])
3 >>> t
4 frozenset([\'b\', \'h\', \'k\', \'o\', \'p\', \'s\'])
5 >>> s == t
6 False
7 >>> set(\'posh\') == set(\'shop\')
8 True

子集/超集:Set用python的比较操作符检查某集合是否是其他集合的超集或子集。"小于"符号(<,<=)用来判断子集,"大于"符号(>,>=)用来判断超集。

1 >>> set(\'shop\') < set(\'cheeseshop\')
2 True
3 >>> set(\'bookshop\') >= set(\'shop\')
4 True

5.2.集合类型操作符(所有的集合类型)

联合(|):联合(union)操作和集合的OR等价,两个集合的联合是一个新集合,该集合中的每个元素都至少是其中一个集合的成员。联合有一个等价的方法,union()

1 >>> s
2 set([\'c\', \'e\', \'h\', \'o\', \'p\', \'s\'])
3 >>> t
4 frozenset([\'b\', \'h\', \'k\', \'o\', \'p\', \'s\'])
5 >>> s | t
6 set([\'c\', \'b\', \'e\', \'h\', \'k\', \'o\', \'p\', \'s\'])
7 >>>

交集(&):交集操作比作集合的AND(或合取)操作,两个集合的交集是一个新集合,该集合中的每个元素同时是两个集合中的成员,即属于两个集合的成员。交集符号有一个等价的方法,intersection()。

1 >>> s
2 set([\'c\', \'e\', \'h\', \'o\', \'p\', \'s\'])
3 >>> t
4 frozenset([\'b\', \'h\', \'k\', \'o\', \'p\', \'s\'])
5 >>> s & t
6 set([\'h\', \'s\', \'o\', \'p\'])

差补/相对补集(-):两个集合(s和t)的差补或相对补集是指一个集合C,该集合中的元素,只属于集合s,而不属于集合t。差符号有一个等价的方法,difference()

1 set([\'c\', \'e\', \'h\', \'o\', \'p\', \'s\'])
2 >>> t
3 frozenset([\'b\', \'h\', \'k\', \'o\', \'p\', \'s\'])
4 >>> s - t
5 set([\'c\', \'e\'])

对称差分(^):对称差分是集合的XOR(又称"异或"),两个集合(s和t)的对称差分是指另一个集合C,该集合中的元素,只能是属于集合s或集合t的成员,不能同时属于两个集合,对称差分有一个等价的方法,symmetric_difference()

1 >>> s
2 set([\'c\', \'e\', \'h\', \'o\', \'p\', \'s\'])
3 >>> t
4 frozenset([\'b\', \'h\', \'k\', \'o\', \'p\', \'s\'])
5 >>> s ^ t
6 set([\'b\', \'e\', \'k\', \'c\'])

混合集合类型操作:如果两个操作数的类型相同,即都是可变集合或不可变集合,则所产生的结果类型是相同的,如果左右两个操作数的类型不相同(左操作数是set,右操作数是frozenset,或相反情况),则所产生的结果类型与左操作数的类型相同。

1 >>> s
2 set([\'c\', \'e\', \'h\', \'o\', \'p\', \'s\'])
3 >>> t
4 frozenset([\'b\', \'h\', \'k\', \'o\', \'p\', \'s\'])
5 >>> s | t
6 set([\'c\', \'b\', \'e\', \'h\', \'k\', \'o\', \'p\', \'s\'])
7 >>> t | s
8 frozenset([\'c\', \'b\', \'e\', \'h\', \'k\', \'o\', \'p\', \'s\'])

5.3.集合类型操作符(仅适用于可变集合)

(union)Update(|=):从已存在的集合中添加(可能多个)成员,和update等价

1 >>> s = set(\'cheeseshop\')
2 >>> u = frozenset(s)
3 >>> s |= set(\'pypi\')
4 >>> s
5 set([\'c\', \'e\', \'i\', \'h\', \'o\', \'p\', \'s\', \'y\'])

Retention/Intersection Update(&=):保留(或交集更新)操作保留与其他集合的共有成员。此方法和intersection_update()等价。

1 >>> s
2 set([\'p\', \'c\', \'e\', \'h\', \'s\', \'o\'])
3 >>> s &= set(\'shop\')
4 >>> s
5 set([\'h\', \'s\', \'o\', \'p\'])
6 >>>

Difference Update(-=):对集合s和t进行差更新操作s -= t,差更新操作会返回一个集合,该集合中的成员是集合s去除掉集合t中元素后剩余的元素。此方法和difference_update()等价。

1 >>> s
2 set([\'p\', \'c\', \'e\', \'h\', \'s\', \'o\'])
3 >>> s -= set(\'shop\')
4 >>> s
5 set([\'c\', \'e\'])

Symmetric Difference Update(^=):对集合s和t进行对称差分更新操作(s^=t)会返回一个集合,该集合中的成员仅是原集合s或另一个集合t中的成员。此方法和symmetric_difference_update()等价。

1 >>> s
2 set([\'p\', \'c\', \'e\', \'h\', \'s\', \'o\'])
3 >>> t = frozenset(\'bookshop\')
4 >>> s ^= t
5 >>> s
6 set([\'c\', \'b\', \'e\', \'k\'])

6.内建函数

len():返回集合的基数(或元素的个数)

6.1.集合类型工厂函数

set()和frozenset():set()生成可变集合,frozenset()生成不可变集合,不提供参数,生成空集合;参数必须是可迭代的,即一个序列或迭代器,或支持迭代的对象,例如一个文件或字典。

6.2.集合类型内建方法

6.2.1.方法(所有的集合方法)

方法名称

操作

s.issubset(t)

如果s是t的子集,则返回True,否则返回False

s.issuperset(t)

如果t是s的超集,则返回True,否则返回False

s.union(t)

返回一个新集合,该集合是s和t的并集

s.intersection(t)

返回一个新集合,该集合是s和t的交集

s.difference(t)

返回一个新集合,该集合是s的成员,但不是t的成员

s.symmetric_difference

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

s.copy()

返回一个新集合,该集合是s的浅复制

6.2.2.方法(仅适用于可变集合)

方法名称

操作

s.update(t)

用t中的元素修改s,即s现在包含

s.intersection_update()

s中的成员是共同属于s和t的元素

s.symmetric_difference_update(t)

s中的成员更新为那些包含在s或t中,但不是s和t共有的元素

s.add(obj)

在集合s中添加对象obj

s.remove(obj)

从集合s中删除对象obj,如果obj不是集合s中的元素(obj not in s),将引发KeyError错误。

s.discard(obj)

如果obj是集合s中的元素,从集合s中删除对象obj

s.pop()

删除集合s中的任意一个对象,并返回它

s.clear()

删除集合s中的所有元素

附录:集合类型总结表

函数/方法名

等价操作符

说明

所有集合类型

len(s)

 

集合基数:集合s中元素的个数

set([obj])

 

可变集合工厂函数:obj必须是支持迭代的,由obj中的元素创建集合,否则创建一个空集合

frozenset([obj])

 

不可变集合工厂函数:执行方式和set()相同,但它返回的是不可变集合

 

obj in s

成员测试:obj是s中的一个元素吗?

 

obj not in s

非成员测试:obj不是s中的一个元素吗?

 

s == t

等价测试,测试s和t是否具有相同的元素?

 

s != t

不等价测试,与==相反

 

s < t

(严格意义上)子集测试:s!=t且s中所有的元素都是t的成员

s.issubset(t)

s <= t

子集测试(允许不严格意义上的子集):s中所有的元素都是t的成员

 

s > t

(严格意义上)超集测试:s!=t且t中所有的元素都是s的成员

s.issuperset(t)

s >= t

超集测试(允许不严格意义上的超集):t中所有的元素都是s的成员

s.union(t)

s | t

合并集合:s或t中的元素

s.intersection(t)

以上是关于python类型-集合的主要内容,如果未能解决你的问题,请参考以下文章

laravel特殊功能代码片段集合

Python数据类型-集合(set)

在python 3.6中处理自定义编码时遇到类型错误

Python学习总结

python之数据类型补充集合深浅copy

Java方法

(c)2006-2024 SYSTEM All Rights Reserved IT常识