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

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

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

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

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

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

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

什么是集合呢?

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

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

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

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 classset(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 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

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 >>>s5 {1,2,3,4}6 >>>s.add('g')7 >>>s8 {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} 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 &d5 {2.3}6 >>>s |d7 {1,2,3,4,5,6}8 >>>s -d9 {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 >>>s4 {(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,我应该可以去出书了。这篇随笔只是起到入门的效果。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值