Python数据结构之四——set(集合)

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

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

  Python编程软件的安装与使用——Windows、Linux和Mac

  Python基础——输出[print()]与输入[input()]

  Python基础——数据类型与基本运算【主要为除法】

       Python基础——字符串

       Python基础——条件判断

       Python基础——for/while循环

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

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

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

  Python数据结构之一——list(列表)

  Python数据结构之二——tuple(元组)

  Python数据结构之三——dict(字典)

  本篇随笔将开始一段关于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 >>>a
4 set()
5 >>>type(a)
6 <class 'set'>
复制代码

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

1.2 创建非空集合

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

复制代码
 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'} <class 'set'>
 9 >>>print(b,type(b))
10 {'f', 'e', 'b', 'c', 'd', 'a'} <class 'set'>
11 >>>print(c,type(c))
12 {'b', 'a','c'} <class 'set'>
13 >>>print(d,type(d))
14 {'c', 'b', 'a'} <class 'set'>
复制代码

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

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

 

功能属性

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

  set功能属性如下:

复制代码
1 class set(object):2     """3     set() -> new empty set object4     set(iterable) -> new set object5     6     Build an unordered collection of unique elements.7     """8     def add(self, *args, **kwargs): # real signature unknown9         """10         Add an element to a set.11         12         This has no effect if the element is already present.13         """14         pass15 16     def clear(self, *args, **kwargs): # real signature unknown17         """ Remove all elements from this set. """18         pass19 20     def copy(self, *args, **kwargs): # real signature unknown21         """ Return a shallow copy of a set. """22         pass23 24     def difference(self, *args, **kwargs): # real signature unknown25         """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         pass31 32     def difference_update(self, *args, **kwargs): # real signature unknown33         """ Remove all elements of another set from this set. """34         pass35 36     def discard(self, *args, **kwargs): # real signature unknown37         """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         pass43 44     def intersection(self, *args, **kwargs): # real signature unknown45         """46         Return the intersection of two sets as a new set.47         48         (i.e. all elements that are in both sets.)49         """50         pass51 52     def intersection_update(self, *args, **kwargs): # real signature unknown53         """ Update a set with the intersection of itself and another. """54         pass55 56     def isdisjoint(self, *args, **kwargs): # real signature unknown57         """ Return True if two sets have a null intersection. """58         pass59 60     def issubset(self, *args, **kwargs): # real signature unknown61         """ Report whether another set contains this set. """62         pass63 64     def issuperset(self, *args, **kwargs): # real signature unknown65         """ Report whether this set contains another set. """66         pass67 68     def pop(self, *args, **kwargs): # real signature unknown69         """70         Remove and return an arbitrary set element.71         Raises KeyError if the set is empty.72         """73         pass74 75     def remove(self, *args, **kwargs): # real signature unknown76         """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         pass82 83     def symmetric_difference(self, *args, **kwargs): # real signature unknown84         """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         pass90 91     def symmetric_difference_update(self, *args, **kwargs): # real signature unknown92         """ Update a set with the symmetric difference of itself and another. """93         pass94 95     def union(self, *args, **kwargs): # real signature unknown96         """97         Return the union of sets as a new set.98         99         (i.e. all elements that are in either set.)
100         """
101         pass
102 
103     def update(self, *args, **kwargs): # real signature unknown
104         """ Update a set with the union of itself and others. """
105         pass
106 
107     def __and__(self, *args, **kwargs): # real signature unknown
108         """ Return self&value. """
109         pass
110 
111     def __contains__(self, y): # real signature unknown; restored from __doc__
112         """ x.__contains__(y) <==> y in x. """
113         pass
114 
115     def __eq__(self, *args, **kwargs): # real signature unknown
116         """ Return self==value. """
117         pass
118 
119     def __getattribute__(self, *args, **kwargs): # real signature unknown
120         """ Return getattr(self, name). """
121         pass
122 
123     def __ge__(self, *args, **kwargs): # real signature unknown
124         """ Return self>=value. """
125         pass
126 
127     def __gt__(self, *args, **kwargs): # real signature unknown
128         """ Return self>value. """
129         pass
130 
131     def __iand__(self, *args, **kwargs): # real signature unknown
132         """ Return self&=value. """
133         pass
134 
135     def __init__(self, seq=()): # known special case of set.__init__
136         """
137         set() -> new empty set object
138         set(iterable) -> new set object
139         
140         Build an unordered collection of unique elements.
141         # (copied from class doc)
142         """
143         pass
144 
145     def __ior__(self, *args, **kwargs): # real signature unknown
146         """ Return self|=value. """
147         pass
148 
149     def __isub__(self, *args, **kwargs): # real signature unknown
150         """ Return self-=value. """
151         pass
152 
153     def __iter__(self, *args, **kwargs): # real signature unknown
154         """ Implement iter(self). """
155         pass
156 
157     def __ixor__(self, *args, **kwargs): # real signature unknown
158         """ Return self^=value. """
159         pass
160 
161     def __len__(self, *args, **kwargs): # real signature unknown
162         """ Return len(self). """
163         pass
164 
165     def __le__(self, *args, **kwargs): # real signature unknown
166         """ Return self<=value. """
167         pass
168 
169     def __lt__(self, *args, **kwargs): # real signature unknown
170         """ Return self<value. """
171         pass
172 
173     @staticmethod # known case of __new__
174     def __new__(*args, **kwargs): # real signature unknown
175         """ Create and return a new object.  See help(type) for accurate signature. """
176         pass
177 
178     def __ne__(self, *args, **kwargs): # real signature unknown
179         """ Return self!=value. """
180         pass
181 
182     def __or__(self, *args, **kwargs): # real signature unknown
183         """ Return self|value. """
184         pass
185 
186     def __rand__(self, *args, **kwargs): # real signature unknown
187         """ Return value&self. """
188         pass
189 
190     def __reduce__(self, *args, **kwargs): # real signature unknown
191         """ Return state information for pickling. """
192         pass
193 
194     def __repr__(self, *args, **kwargs): # real signature unknown
195         """ Return repr(self). """
196         pass
197 
198     def __ror__(self, *args, **kwargs): # real signature unknown
199         """ Return value|self. """
200         pass
201 
202     def __rsub__(self, *args, **kwargs): # real signature unknown
203         """ Return value-self. """
204         pass
205 
206     def __rxor__(self, *args, **kwargs): # real signature unknown
207         """ Return value^self. """
208         pass
209 
210     def __sizeof__(self): # real signature unknown; restored from __doc__
211         """ S.__sizeof__() -> size of S in memory, in bytes """
212         pass
213 
214     def __sub__(self, *args, **kwargs): # real signature unknown
215         """ Return self-value. """
216         pass
217 
218     def __xor__(self, *args, **kwargs): # real signature unknown
219         """ Return self^value. """
220         pass
221 
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 >>>s
11 {1,2,3,4,'g'}
复制代码

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

  2. 删除元素

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

复制代码
1 #删除元素
2 >>>s
3 {1,2,3,4,'g'}
4 >>>s.remove('g')
5 >>>s
6 {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() <class 'set'>
6 >>>print(b,type(b))
7 None <class 'NoneType'>
复制代码

  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 = s
12 >>>print(s,id(s))
13 {1, 2, 3, 4} 2097937785128
14 >>>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 - s
11 {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 <class 'tuple'>
10 >>>d = {1,2,(1,2,[1,2,3],4)}
11 Traceback (most recent call last):
12   File "<stdin>", line 1, in <module>
13 TypeError: unhashable type: 'list'
复制代码

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

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

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

 

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/391043.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

volatile关键字有什么用

问题&#xff1a;volatile关键字有什么用 在工作的时候&#xff0c;我碰到了volatile关键字。但是我不是非常了解它。我发现了这个解释 这篇文章已经解释了问题中的关键字的细节了&#xff0c;你们曾经用过它吗或者见过正确使用这个关键字的样例 回答 Java中同步的实现大多是…

knn 机器学习_机器学习:通过预测意大利葡萄酒的品种来观察KNN的工作方式

knn 机器学习Introduction介绍 For this article, I’d like to introduce you to KNN with a practical example.对于本文&#xff0c;我想通过一个实际的例子向您介绍KNN。 I will consider one of my project that you can find in my GitHub profile. For this project, …

MMU内存管理单元(看书笔记)

http://note.youdao.com/noteshare?id8e12abd45bba955f73874450e5d62b5b&subD09C7B51049D4F88959668B60B1263B5 笔记放在了有道云上面了&#xff0c;不想再写一遍了。 韦东山《嵌入式linux完全开发手册》看书笔记转载于:https://www.cnblogs.com/coversky/p/7709381.html

Java中如何读取文件夹下的所有文件

问题&#xff1a;Java中如何读取文件夹下的所有文件 Java里面是如何读取一个文件夹下的所有文件的&#xff1f; 回答一 public void listFilesForFolder(final File folder) {for (final File fileEntry : folder.listFiles()) {if (fileEntry.isDirectory()) {listFilesFor…

github pages_如何使用GitHub Actions和Pages发布GitHub事件数据

github pagesTeams who work on GitHub rely on event data to collaborate. The data recorded as issues, pull requests, and comments become vital to understanding the project.在GitHub上工作的团队依靠事件数据进行协作。 记录为问题&#xff0c;请求和注释的数据对于…

c# .Net 缓存 使用System.Runtime.Caching 做缓存 平滑过期,绝对过期

1 public class CacheHeloer2 {3 4 /// <summary>5 /// 默认缓存6 /// </summary>7 private static CacheHeloer Default { get { return new CacheHeloer(); } }8 9 /// <summary>10 /// 缓存初始化11 /// </summary>12 …

python 实现分步累加_Python网页爬取分步指南

python 实现分步累加As data scientists, we are always on the look for new data and information to analyze and manipulate. One of the main approaches to find data right now is scraping the web for a particular inquiry.作为数据科学家&#xff0c;我们一直在寻找…

Java 到底有没有析构函数呢?

Java 到底有没有析构函数呢&#xff1f; ​ ​ Java 到底有没有析构函数呢&#xff1f;我没能找到任何有关找个的文档。如果没有的话&#xff0c;我要怎么样才能达到一样的效果&#xff1f; ​ ​ ​ 为了使得我的问题更加具体&#xff0c;我写了一个应用程序去处理数据并且说…

关于双黑洞和引力波,LIGO科学家回答了这7个你可能会关心的问题

引力波的成功探测&#xff0c;就像双黑洞的碰撞一样&#xff0c;一石激起千层浪。 关于双黑洞和引力波&#xff0c;LIGO科学家回答了这7个你可能会关心的问题 最近&#xff0c;引力波的成功探测&#xff0c;就像双黑洞的碰撞一样&#xff0c;一石激起千层浪。 大家兴奋之余&am…

如何使用HTML,CSS和JavaScript构建技巧计算器

A Tip Calculator is a calculator that calculates a tip based on the percentage of the total bill.小费计算器是根据总账单的百分比计算小费的计算器。 Lets build one now.让我们现在建立一个。 第1步-HTML&#xff1a; (Step 1 - HTML:) We create a form in order to…

用于MLOps的MLflow简介第1部分:Anaconda环境

在这三部分的博客中跟随了演示之后&#xff0c;您将能够&#xff1a; (After following along with the demos in this three part blog you will be able to:) Understand how you and your Data Science teams can improve your MLOps practices using MLflow 了解您和您的数…

[WCF] - 使用 [DataMember] 标记的数据契约需要声明 Set 方法

WCF 数据结构中返回的只读属性 TotalCount 也需要声明 Set 方法。 [DataContract]public class BookShelfDataModel{ public BookShelfDataModel() { BookList new List<BookDataModel>(); } [DataMember] public List<BookDataModel>…

sql注入语句示例大全_SQL Group By语句用示例语法解释

sql注入语句示例大全GROUP BY gives us a way to combine rows and aggregate data.GROUP BY为我们提供了一种合并行和汇总数据的方法。 The data used is from the campaign contributions data we’ve been using in some of these guides.使用的数据来自我们在其中一些指南…

ConcurrentHashMap和Collections.synchronizedMap(Map)的区别是什么?

ConcurrentHashMap和Collections.synchronizedMap(Map)的区别是什么&#xff1f; 我有一个会被多个线程同时修改的Map 在Java的API里面&#xff0c;有3种不同的实现了同步的Map实现 HashtableCollections.synchronizedMap(Map)ConcurrentHashMap 据我所知&#xff0c;HashT…

pymc3 贝叶斯线性回归_使用PyMC3估计的贝叶斯推理能力

pymc3 贝叶斯线性回归内部AI (Inside AI) If you’ve steered clear of Bayesian regression because of its complexity, this article shows how to apply simple MCMC Bayesian Inference to linear data with outliers in Python, using linear regression and Gaussian ra…

Hadoop Streaming详解

一&#xff1a; Hadoop Streaming详解 1、Streaming的作用 Hadoop Streaming框架&#xff0c;最大的好处是&#xff0c;让任何语言编写的map, reduce程序能够在hadoop集群上运行&#xff1b;map/reduce程序只要遵循从标准输入stdin读&#xff0c;写出到标准输出stdout即可 其次…

mongodb分布式集群搭建手记

一、架构简介 目标 单机搭建mongodb分布式集群(副本集 分片集群)&#xff0c;演示mongodb分布式集群的安装部署、简单操作。 说明 在同一个vm启动由两个分片组成的分布式集群&#xff0c;每个分片都是一个PSS(Primary-Secondary-Secondary)模式的数据副本集&#xff1b; Confi…

归约归约冲突_JavaScript映射,归约和过滤-带有代码示例的JS数组函数

归约归约冲突Map, reduce, and filter are all array methods in JavaScript. Each one will iterate over an array and perform a transformation or computation. Each will return a new array based on the result of the function. In this article, you will learn why …

为什么Java里面的静态方法不能是抽象的

为什么Java里面的静态方法不能是抽象的&#xff1f; 问题是为什么Java里面不能定义一个抽象的静态方法&#xff1f;例如&#xff1a; abstract class foo {abstract void bar( ); // <-- this is okabstract static void bar2(); //<-- this isnt why? }回答一 因为抽…

python16_day37【爬虫2】

一、异步非阻塞 1.自定义异步非阻塞 1 import socket2 import select3 4 class Request(object):5 def __init__(self,sock,func,url):6 self.sock sock7 self.func func8 self.url url9 10 def fileno(self): 11 return self.soc…