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的元素,則記作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 >>>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功能屬性雖多,但平時常用的也就那么幾個。
常用屬性
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符號 | 含義 |
- 或\ | - | 差集,相對補集 |
∩ | & | 交集 |
∪ | | | 并集 |
≠ | != | 不等于 |
= | == | 等于 |
∈ | 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