博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python数据结构之四——set(集合)
阅读量:6245 次
发布时间:2019-06-22

本文共 9512 字,大约阅读时间需要 31 分钟。

  Python版本:3.6.2  操作系统:Windows  作者:SmallWZQ

  经过几天的回顾和学习,我终于把Python 3.x中的基础知识介绍好啦。下面将要继续什么呢?让我想想先~~~嗯,还是先整理一下近期有关Python基础知识的随笔吧。

  

  

  

       

       

       

  上述六篇均为Python 3.x的基础知识。九尺高台,起于累土。学习Python就要从最基本开始,经过逐步的积累,才能有所成就。

  Python基础知识再次回顾好了,接下来该干嘛呢?这不继续Python数据结构了吗?

  上次我写了有关Python数据结构(列表、元组、字典)的3篇随笔:

  

  

  

  本篇随笔将开始一段关于set(集合)之旅吧。

  什么是集合呢?

  说到集合,我首先想到了高中的数学。高中,人生学习中最繁忙的一段时光。直到现在,我能回忆起最多的就是学习、学习、还是读书……言归正传,高一时的数学,我们就接触到了集合。书中应该是这样定义的:

  集合:由一个或多个确定的元素所构成的整体。若x是集合A的,则记作xA

  集合中的元素有三个特征:

  1. 确定性:集合中的元素必须是确定的;

  2. 互异性:集合中的元素互不相同,例如:集合A={1,a},则a不能等于1);

  3. 无序性:集合中的元素没有先后之分,例如:集合{3,4,5}和{3,5,4}算作同一个集合。

  Python 3.x中的set特征与数学中类似。我们之前学过list、tuple以及dict。其实,set与dict大致相同,但set没有Value,只有key。因此,set只是一组key的集合。由于key不能重复,所以,在set中,没有重复的key。

创建集合

 1.1 创建空集合

  在集合中,创建空集合(set)必须使用函数set()。

1 #创建空集合2 >>>a = set()3 >>>a4 set()5 >>>type(a)6 

  注:不能使用{},{}用于创建空字典。

1.2 创建非空集合

  非空集合可以用大括号{}或 函数来创建。

1 #创建集合 2 >>>a={
'a','b','c','d'} 3 >>>b=set('abcdefabcd') 4 >>>c=set({
'a':1,'b':2,'c':3}) 5 >>>d=set(['a','b','c','a']) 6 #运行结果 7 >>>print(a,type(a)) 8 {
'c', 'd', 'b', 'a'}
9 >>>print(b,type(b))10 {
'f', 'e', 'b', 'c', 'd', 'a'}
11 >>>print(c,type(c))12 {
'b', 'a','c'}
13 >>>print(d,type(d))14 {
'c', 'b', 'a'}

  特别地,set中的元素是无序的,并且重复元素在set中自动被过滤。

1 #set中重复元素被自动过滤2 >>>s = {1,2,,1,2,4,4,3,3}3 >>>s4 {1,2,3,4}

 

功能属性

  set有很多很多的功能属性。你们不信?不信的话,继续往下看呗~~~

  set功能属性如下:

1 class set(object):  2     """  3     set() -> new empty set object  4     set(iterable) -> new set object  5       6     Build an unordered collection of unique elements.  7     """  8     def add(self, *args, **kwargs): # real signature unknown  9         """ 10         Add an element to a set. 11          12         This has no effect if the element is already present. 13         """ 14         pass 15  16     def clear(self, *args, **kwargs): # real signature unknown 17         """ Remove all elements from this set. """ 18         pass 19  20     def copy(self, *args, **kwargs): # real signature unknown 21         """ Return a shallow copy of a set. """ 22         pass 23  24     def difference(self, *args, **kwargs): # real signature unknown 25         """ 26         Return the difference of two or more sets as a new set. 27          28         (i.e. all elements that are in this set but not the others.) 29         """ 30         pass 31  32     def difference_update(self, *args, **kwargs): # real signature unknown 33         """ Remove all elements of another set from this set. """ 34         pass 35  36     def discard(self, *args, **kwargs): # real signature unknown 37         """ 38         Remove an element from a set if it is a member. 39          40         If the element is not a member, do nothing. 41         """ 42         pass 43  44     def intersection(self, *args, **kwargs): # real signature unknown 45         """ 46         Return the intersection of two sets as a new set. 47          48         (i.e. all elements that are in both sets.) 49         """ 50         pass 51  52     def intersection_update(self, *args, **kwargs): # real signature unknown 53         """ Update a set with the intersection of itself and another. """ 54         pass 55  56     def isdisjoint(self, *args, **kwargs): # real signature unknown 57         """ Return True if two sets have a null intersection. """ 58         pass 59  60     def issubset(self, *args, **kwargs): # real signature unknown 61         """ Report whether another set contains this set. """ 62         pass 63  64     def issuperset(self, *args, **kwargs): # real signature unknown 65         """ Report whether this set contains another set. """ 66         pass 67  68     def pop(self, *args, **kwargs): # real signature unknown 69         """ 70         Remove and return an arbitrary set element. 71         Raises KeyError if the set is empty. 72         """ 73         pass 74  75     def remove(self, *args, **kwargs): # real signature unknown 76         """ 77         Remove an element from a set; it must be a member. 78          79         If the element is not a member, raise a KeyError. 80         """ 81         pass 82  83     def symmetric_difference(self, *args, **kwargs): # real signature unknown 84         """ 85         Return the symmetric difference of two sets as a new set. 86          87         (i.e. all elements that are in exactly one of the sets.) 88         """ 89         pass 90  91     def symmetric_difference_update(self, *args, **kwargs): # real signature unknown 92         """ Update a set with the symmetric difference of itself and another. """ 93         pass 94  95     def union(self, *args, **kwargs): # real signature unknown 96         """ 97         Return the union of sets as a new set. 98          99         (i.e. all elements that are in either set.)100         """101         pass102 103     def update(self, *args, **kwargs): # real signature unknown104         """ Update a set with the union of itself and others. """105         pass106 107     def __and__(self, *args, **kwargs): # real signature unknown108         """ Return self&value. """109         pass110 111     def __contains__(self, y): # real signature unknown; restored from __doc__112         """ x.__contains__(y) <==> y in x. """113         pass114 115     def __eq__(self, *args, **kwargs): # real signature unknown116         """ Return self==value. """117         pass118 119     def __getattribute__(self, *args, **kwargs): # real signature unknown120         """ Return getattr(self, name). """121         pass122 123     def __ge__(self, *args, **kwargs): # real signature unknown124         """ Return self>=value. """125         pass126 127     def __gt__(self, *args, **kwargs): # real signature unknown128         """ Return self>value. """129         pass130 131     def __iand__(self, *args, **kwargs): # real signature unknown132         """ Return self&=value. """133         pass134 135     def __init__(self, seq=()): # known special case of set.__init__136         """137         set() -> new empty set object138         set(iterable) -> new set object139         140         Build an unordered collection of unique elements.141         # (copied from class doc)142         """143         pass144 145     def __ior__(self, *args, **kwargs): # real signature unknown146         """ Return self|=value. """147         pass148 149     def __isub__(self, *args, **kwargs): # real signature unknown150         """ Return self-=value. """151         pass152 153     def __iter__(self, *args, **kwargs): # real signature unknown154         """ Implement iter(self). """155         pass156 157     def __ixor__(self, *args, **kwargs): # real signature unknown158         """ Return self^=value. """159         pass160 161     def __len__(self, *args, **kwargs): # real signature unknown162         """ Return len(self). """163         pass164 165     def __le__(self, *args, **kwargs): # real signature unknown166         """ Return self<=value. """167         pass168 169     def __lt__(self, *args, **kwargs): # real signature unknown170         """ Return self
size of S in memory, in bytes """212 pass213 214 def __sub__(self, *args, **kwargs): # real signature unknown215 """ Return self-value. """216 pass217 218 def __xor__(self, *args, **kwargs): # real signature unknown219 """ Return self^value. """220 pass221 222 __hash__ = None
set

   set功能属性虽多,但平时常用的也就那么几个。

常用属性

  1. 添加元素

  在集合中添加元素,可以使用add()方法,并且不生成一个新的集合。

1 #添加元素:add() 2 >>>s = {1,2,3} 3 >>>s.add(4) 4 >>>s 5 {1,2,3,4} 6 >>>s.add('g') 7 >>>s 8 {1,2,3,4,'g'} 9 >>>s.add(4)10 >>>s11 {1,2,3,4,'g'}

  add()方法可以向set中添加元素,可以重复添加,但不会有效果。

  2. 删除元素

   set中利用remove()方法可以删除集合中的元素。

1 #删除元素2 >>>s3 {1,2,3,4,'g'}4 >>>s.remove('g')5 >>>s6 {1,2,3,4}

  3. 清空元素

  clear()方法可以清空set中的元素。

1 #清空元素2 >>>a = {1,2,3,4}3 >>>b = a.clear()4 >>>print(a,type(a))5 set() 
6 >>>print(b,type(b))7 None

  4. 复制元素

  copy()方法只能浅拷贝set中的元素,并生成一个新的集合。

1 #浅拷贝:copy() 2 >>>a = {1,(9,2),3} 3 >>>b = a.copy() 4 >>>print(a,id(a)) 5 {(9, 2), 1, 3} 2097937619880 6 >>>print(b,id(b)) 7 {(9, 2), 1, 3} 2097937620776 8  9 #赋值10 >>>s = {1,2,3,4}11 >>>d = s12 >>>print(s,id(s))13 {1, 2, 3, 4} 209793778512814 >>>print(d,id(d))15 {1, 2, 3, 4} 2097937785128

  5. pop()

  pop()方法用于从set中随机取一个元素。记住,是随机的~~~

1 #pop()方法2 >>>s = {1,2,3,4,5,'g','s'}3 >>>s.pop()4 'g'5 >>>s.pop()6 3

  6. set集合操作

  set与数学中的集合类似,是无序的和无重复元素的集合。因此,在Python中,set可以进行交集、并集、补集等操作。

Python set集合操作
数学符号 Python符号 含义
- 或\ - 差集,相对补集
& 交集
| 并集
!= 不等于
== 等于
in 是成员关系
not in 非成员关系

 

1 #set集合操作 2 >>>s = {1,2,3,4} 3 >>>d = {2.3.5.6} 4 >>>s & d 5 {2.3} 6 >>>s | d 7 {1,2,3,4,5,6} 8 >>>s - d 9 {1,4}10 >>>d - s11 {5,6}

  set和dict的唯一区别仅在于没有存储对应的value,但是,set的原理和dict一样,所以,同样不可以放入可变对象,因为无法判断两个可变对象是否相等,也就无法保证set内部“不会有重复元素”。因此,最常用的key是字符串。

“思想者”

  set中存储着key,集合中不能放入可变的对象。之前的文章也说过:tuple是不可变的,而list是可变的。因此,set中是可以存储tuple的。这是真的吗?

  时间是检验真理的唯一标准。下面请看示例代码:

1 #tuple可以作为集合中的元素 2 >>>s = {(1,),(1,2,3),1,2,'g'} 3 >>>s 4 {(1,),(1,2,3),1,2,'g'} 5  6 #tuple也有失灵的时候 7 >>>t = (1,2,[1,2,3],4) 8 >>>type(t) 9 
10 >>>d = {1,2,(1,2,[1,2,3],4)}11 Traceback (most recent call last):12 File "
", line 1, in
13 TypeError: unhashable type: 'list'

  为什么会有错误呢?我也不清楚哎~~~这里面的道道很深,请读者细细体会。

  set是一种数据结构。如果要详细的介绍set,我应该可以去出书了。这篇随笔只是起到入门的效果。

  正所谓“师傅”领进门,修行靠大家嘛!

 

出处:http://www.cnblogs.com/SmallWZQ/p/8488744.html

你可能感兴趣的文章
域名商年度报告:2014年51DNS域名总量达110万
查看>>
5月“.中国”域名总量跌至26.6万个 净减1165个
查看>>
7月12日28家中国域名商六类国际域名注册保有量统计
查看>>
7月第4周网络安全报告:被篡改的.COM网站占75.4%
查看>>
11月23日全球域名商解析量TOP22:爱名网升至十九名
查看>>
【DHGate】2014-09-24项目总结
查看>>
改善用户体验的药方
查看>>
Kubernetes审计日志方案
查看>>
容器安全拾遗 - Rootless Container初探
查看>>
ERROR 2002 (HY000) Can’t connect to local MySQL server through socket ‘var mysql 启动不了
查看>>
数据库SQL优化大总结之 百万级数据库优化方案
查看>>
mysql unrecognized service问题解决
查看>>
手把手教你最简单的开源项目托管GitHub入门教程
查看>>
使用VideoView自定义一个播放器控件
查看>>
VXLAN大二层实现穿越互联网通过DHCP服务器获取IP地址
查看>>
网站加载不了 图片
查看>>
u盘安装ubuntu12.04LTS及手动下载安装eclipse
查看>>
sqlserver2000系统表sysproperties在SQL2008中无效的问题
查看>>
关系数据库常用SQL语句语法大全
查看>>
对mybastis 的理解2--BaseDao接口方法声明
查看>>