您好,登錄后才能下訂單哦!
有的可變,有的不可變;元素無次序,不可重復。
說明??:
元組算是列表和字符串的某些特征的雜合,那么集合則可以算是列表和字典的某些特征雜合。
>>> s = set("wtf")
>>> s
set(['t', 'w', 'f'])
把字符串中的字符拆解開,形成集合。
>>> s1 = set("zhaodidi")
>>> s1
set(['a', 'd', 'i', 'h', 'o', 'z'])
”haodidi“中有兩個“d”和“i”,創建集合時,如發現重復元素,就會過濾掉。
>>> s2 = {"python",123}
>>> s2
set(['python', 123])
說明??:
下面是實例說明為什么創建集合不提倡使用 {}
>>> s3 = {"datagrand",[1,2,'b'],{"name":"python","lang":"chinese"},123}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'dict'
>>> s4 = set("'datagrand',[1,2,'b'],{'name':'python','lang':'chinese'},123")
>>> s4
set(["'", ',', '1', '3', '2', ':', '[', ']', 'a', 'c', 'b', 'e', 'd', 'g', 'i', 'h', 'm', 'l', 'o', 'n', 'p', 's', 'r', 't', 'y', '{', '}'])
說明??:使用 set() 建立起來的集合是可變集合,可變集合都是unhashable type。但是集合中的元素是 hashable type !
簡單理解就是,某數據unhashable(不可哈希)就是其可變,如list或dict。否則,就是hashable(可哈希),如字符串。
>>> dir(set)
['__and__', '__class__', '__cmp__', '__contains__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__iand__', '__init__', '__ior__', '__isub__', '__iter__', '__ixor__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__rand__', '__reduce__', '__reduce_ex__', '__repr__', '__ror__', '__rsub__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__xor__', 'add', 'clear', 'copy', 'difference', 'difference_update', 'discard', 'intersection', 'intersection_update', 'isdisjoint', 'issubset', 'issuperset', 'pop', 'remove', 'symmetric_difference', 'symmetric_difference_update', 'union', 'update']
上面列出的并沒有“index”
>>> s1
set(['a', 'd', 'i', 'h', 'o', 'z'])
>>> s1[2]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'set' object does not support indexing
報錯中明確告知,集合不支持索引!
>>> help(set.add)
Help on method_descriptor:
add(...)
Add an element to a set.
This has no effect if the element is already present.
(END)
實例說明如下:
>>> set1 = set()
>>> set1
set([])
>>> set1.add("zhaodi") #屬于原地修改
>>> set1
set(['zhaodi'])
>>> set2 = set("python")
>>> set2
set(['h', 'o', 'n', 'p', 't', 'y'])
>>> set2.add("learning")
>>> set2
set(['h', 'o', 'n', 'p', 't', 'learning', 'y'])
這里重申下:“集合中的元素應該是 hashable 類型”
set2
set(['h', 'o', 'n', 'p', 't', 'learning', 'y'])
>>> set2.add([1,2,3])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
如果將列表 [1,2,3] 變成 hashable 類型呢?
>>> set2.add('[1,2,3]') # 這里的 '[1,2,3]' 就相當于字符串了
>>> set2
set(['[1,2,3]', 'h', 'o', 'n', 'p', 't', 'learning', 'y'])
>>> help(set.update)
Help on method_descriptor:
update(...)
Update a set with the union of itself and others. # 這個方法的作用是用原有的集合自身和其他的什么東西構成的新集合更新原來的集合。
(END)
others是指作為參數的不可變對象,將它和原來的集合組成新的集合,用這個新集合替代原來的集合,如下:
>>> set1
set(['zhaodi'])
>>> set1.update("wutf")
>>> set1
set(['f', 'u', 'zhaodi', 'w', 't'])
>>> set1.update((3,4))
>>> set1
set([3, 4, 'f', 'u', 't', 'w', 'zhaodi'])
合并集合,舉例如下:
>>> set1
set(['zhaodi'])
>>> set2
set(['[1,2,3]', 'h', 'o', 'n', 'p', 't', 'learning', 'y'])
>>> set2.update(set1) # 把 set1 的元素并入到 set2 中
>>> set2
set(['[1,2,3]', 'h', 'o', 'n', 'p', 't', 'learning', 'y', 'zhaodi'])
>>> set1 # set1 并沒有改變
set(['zhaodi'])
>>> help(set.pop)
Help on method_descriptor:
pop(...)
Remove and return an arbitrary(隨意) set element.
Raises KeyError if the set is empty.
(END)
>>> set1
set([3, 4, 'f', 'u', 't', 'w', 'zhaodi'])
>>> set1.pop()
3
>>> set1.pop()
4
>>> set1.pop()
'f'
>>> set1
set(['u', 't', 'w', 'zhaodi'])
>>> set1
set(['u', 't', 'w', 'zhaodi'])
>>> set1.pop('zhaodi')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: pop() takes no arguments (1 given) # pop() 不能有參數的
說明??:
>>> help(set.remove)
Help on method_descriptor:
remove(...)
Remove an element from a set; it must be a member.
If the element is not a member, raise a KeyError.
(END)
說明??:set.remove(obj) 中的 obj 必須是 set 中的元素,否則就報錯。實例如下:
>>> set1
set(['u', 't', 'w', 'zhaodi'])
>>> set1.remove("wtf") # 沒有 “wtf” 這個元素
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'wtf'
>>> set1.remove("w")
>>> set1
set(['u', 't', 'zhaodi'])
>>> help(set.discard)
Help on method_descriptor:
discard(...)
Remove an element from a set if it is a member.
If the element is not a member, do nothing.
(END)
說明??:
>>> set1
set(['u', 't', 'zhaodi'])
>>> set1.discard("u")
>>> set1.discard("wtf")
>>> set1
set(['t', 'zhaodi'])
>>> help(set.clear)
Help on method_descriptor:
clear(...)
Remove all elements from this set.
(END)
實例如下:
>>> set1
set(['t', 'zhaodi'])
>>> set1.clear()
>>> set1
set([])
這篇博文是參考老齊老師的大作《跟老齊學python》進行簡單總結的,這里沒有打廣告的意思,只是感覺老齊老師的書很適合python小白學習,內容讀起來很輕快,老齊老師的書籍邏輯很清晰,有需要的朋友可以看看~~
gitbook版本:《跟老齊學Python》(入門教程)
我當時買時書籍樣紙如下:
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。