摘要:最簡單的說法,即是在最原始的集合論樸素集合論中的定義,集合就是一堆東西。若然是集合的元素,記作。這里對被數學家們稱為直觀的或樸素的集合論進行一個簡短而基本的介紹更詳細的分析可見樸素集合論。對集合進行嚴格的公理推導可見公理化集合論。
回顧一下已經了解的數據類型:int/str/bool/list/dict/tuple
還真的不少了.
不過,python是一個發展的語言,沒準以后還出別的呢.看官可能有疑問了,出了這么多的數據類型,我也記不住呀,特別是里面還有不少方法.
不要擔心記不住,你只要記住愛因斯坦說的就好了.
愛因斯坦在美國演講,有人問:“你可記得聲音的速度是多少?你如何記下許多東西?”
愛因斯坦輕松答道:“聲音的速度是多少,我必須查辭典才能回答。因為我從來不記在辭典上已經印著的東西,我的記憶力是用來記憶書本上沒有的東西。”
多么霸氣的回答,這回答不僅僅霸氣,更是在告訴我們一種方法:只要能夠通過某種方法查找到的,就不需要記憶.
那么,上面那么多數據類型的各種方法,都不需要記憶了,因為它們都可以通過下述方法但不限于這些方法查到(這句話的邏輯還是比較嚴密的,包括但不限于...)
交互模式下用dir()或者help()
google(不推薦Xdu,原因自己體會啦)
為了能夠在總體上對已經學習過的數據類型有了解,我們不妨做如下分類:
是否為序列類型:即該數據的元素是否能夠索引.其中序列類型的包括str/list/tuple
是否可以原處修改:即該數據的元素是否能夠原處修改(特別提醒看官,這里說的是原處修改問題,有的資料里面說str不能修改,也是指原處修改問題.為了避免誤解,特別強調了原處).能夠原處修改的是list/dict(特別說明,dict的鍵必須是不可修改的,dict的值可原處修改)
什么原處修改?看官能不能在交互模式下通過實例解釋一下?
到這里,看官可千萬不要以為本講是復習課.本講的主要內容不是復習,主要內容是要向看官介紹一種新的數據類型:集合(set).徹底暈倒了,到底python有多少個數據類型呢?又多出來了一個.
從基本道理上說,python中的數據類型可以很多,因為每個人都可以自己定義一種數據類型.但是,python官方認可或者說內置的數據類型,就那么幾種了.基本上今天的set講完,就差不多了.在以后的開發過程中,包括今天和以往介紹的數據類型,是常用的.當然,自己定義一個也可以,但是用原生的更好.
創建settuple算是list和str的雜合(雜交的都有自己的優勢,上一節的末后已經顯示了),那么set則可以堪稱是list和dict的雜合.
set擁有類似dict的特點:可以用{}花括號來定義;其中的元素沒有序列,也就是是非序列類型的數據;而且,set中的元素不可重復,這就類似dict的鍵.
set也有繼承了一點list的特點:如可以原處修改(事實上是一種類別的set可以原處修改,另外一種不可以).
下面通過實驗,進一步理解創建set的方法:
>>> s1 = set("qiwsir") #把str中的字符拆解開,形成set.特別注意觀察:qiwsir中有兩個i >>> s1 #但是在s1中,只有一個i,也就是不能重復 set(["q", "i", "s", "r", "w"]) >>> s2 = set([123,"google","face","book","facebook","book"]) #通過list創建set.不能有重復,元素可以是int/str >>> s2 set(["facebook", 123, "google", "book", "face"]) #元素順序排列不是按照指定順序 >>> s3 = {"facebook",123} #通過{}直接創建 >>> s3 set([123, "facebook"])
再大膽做幾個探究,請看官注意觀察結果:
>>> s3 = {"facebook",[1,2,"a"],{"name":"python","lang":"english"},123} Traceback (most recent call last): File "", line 1, in TypeError: unhashable type: "dict" >>> s3 = {"facebook",[1,2],123} Traceback (most recent call last): File " ", line 1, in TypeError: unhashable type: "list"
從上述實驗中,可以看出,通過{}無法創建含有list/dict元素的set.
繼續探索一個情況:
>>> s1 set(["q", "i", "s", "r", "w"]) >>> s1[1] = "I" Traceback (most recent call last): File "", line 1, in TypeError: "set" object does not support item assignment >>> s1 set(["q", "i", "s", "r", "w"]) >>> lst = list(s1) >>> lst ["q", "i", "s", "r", "w"] >>> lst[1] = "I" >>> lst ["q", "I", "s", "r", "w"]
上面的探索中,將set和list做了一個對比,雖然說兩者都能夠做原處修改,但是,通過索引編號(偏移量)的方式,直接修改,list允許,但是set報錯.
那么,set如何修改呢?
更改set還是用前面已經介紹過多次的自學方法,把set的有關內置函數找出來,看看都可以對set做什么操作.
>>> 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"]
為了看的清楚,我把雙劃線__開始的先刪除掉(后面我們會有專題講述這些):
"add", "clear", "copy", "difference", "difference_update", "discard", "intersection", "intersection_update", "isdisjoint", "issubset", "issuperset", "pop", "remove", "symmetric_difference", "symmetric_difference_update", "union", "update"
然后用help()可以找到每個函數的具體使用方法,下面列幾個例子:
增加元素>>> help(set.add) Help on method_descriptor: add(...) Add an element to a set. This has no effect if the element is already present.
下面在交互模式這個最好的實驗室里面做實驗:
>>> a_set = {} #我想當然地認為這樣也可以建立一個set >>> a_set.add("qiwsir") #報錯.看看錯誤信息,居然告訴我dict沒有add.我分明建立的是set呀. Traceback (most recent call last): File "", line 1, in AttributeError: "dict" object has no attribute "add" >>> type(a_set) #type之后發現,計算機認為我建立的是一個dict
特別說明一下,{}這個東西,在dict和set中都用.但是,如上面的方法建立的是dict,不是set.這是python規定的.要建立set,只能用前面介紹的方法了.
>>> a_set = {"a","i"} #這回就是set了吧 >>> type(a_set)#果然 >>> a_set.add("qiwsir") #增加一個元素 >>> a_set #原處修改,即原來的a_set引用對象已經改變 set(["i", "a", "qiwsir"]) >>> b_set = set("python") >>> type(b_set) >>> b_set set(["h", "o", "n", "p", "t", "y"]) >>> b_set.add("qiwsir") >>> b_set set(["h", "o", "n", "p", "t", "qiwsir", "y"]) >>> b_set.add([1,2,3]) #這樣做是不行滴,跟前面一樣,報錯. Traceback (most recent call last): File " ", line 1, in TypeError: unhashable type: "list" >>> b_set.add("[1,2,3]") #可以這樣! >>> b_set set(["[1,2,3]", "h", "o", "n", "p", "t", "qiwsir", "y"])
除了上面的增加元素方法之外,還能夠從另外一個set中合并過來元素,方法是set.update(s2)
>>> help(set.update) update(...) Update a set with the union of itself and others. >>> s1 set(["a", "b"]) >>> s2 set(["github", "qiwsir"]) >>> s1.update(s2) #把s2的元素并入到s1中. >>> s1 #s1的引用對象修改 set(["a", "qiwsir", "b", "github"]) >>> s2 #s2的未變 set(["github", "qiwsir"])刪除
>>> help(set.pop) pop(...) Remove and return an arbitrary set element. Raises KeyError if the set is empty. >>> b_set set(["[1,2,3]", "h", "o", "n", "p", "t", "qiwsir", "y"]) >>> b_set.pop() #從set中任意選一個刪除,并返回該值 "[1,2,3]" >>> b_set.pop() "h" >>> b_set.pop() "o" >>> b_set set(["n", "p", "t", "qiwsir", "y"]) >>> b_set.pop("n") #如果要指定刪除某個元素,報錯了. Traceback (most recent call last): File "", line 1, in TypeError: pop() takes no arguments (1 given)
set.pop()是從set中任意選一個元素,刪除并將這個值返回.但是,不能指定刪除某個元素.報錯信息中就告訴我們了,pop()不能有參數.此外,如果set是空的了,也報錯.這條是幫助信息告訴我們的,看官可以試試.
要刪除指定的元素,怎么辦?
>>> help(set.remove) remove(...) Remove an element from a set; it must be a member. If the element is not a member, raise a KeyError.
set.remove(obj)中的obj,必須是set中的元素,否則就報錯.試一試:
>>> a_set set(["i", "a", "qiwsir"]) >>> a_set.remove("i") >>> a_set set(["a", "qiwsir"]) >>> a_set.remove("w") Traceback (most recent call last): File "", line 1, in KeyError: "w"
跟remove(obj)類似的還有一個discard(obj):
>>> help(set.discard) discard(...) Remove an element from a set if it is a member. If the element is not a member, do nothing.
與help(set.remove)的信息對比,看看有什么不同.discard(obj)中的obj如果是set中的元素,就刪除,如果不是,就什么也不做,do nothing.新聞就要對比著看才有意思呢.這里也一樣.
>>> a_set.discard("a") >>> a_set set(["qiwsir"]) >>> a_set.discard("b") >>>
在刪除上還有一個絕殺,就是set.clear(),它的功能是:Remove all elements from this set.(看官自己在交互模式下help(set.clear))
>>> a_set set(["qiwsir"]) >>> a_set.clear() >>> a_set set([]) >>> bool(a_set) #空了,bool一下返回False. False知識
集合,也是一個數學概念(以下定義來自維基百科)
集合(或簡稱集)是基本的數學概念,它是集合論的研究對象。最簡單的說法,即是在最原始的集合論─樸素集合論─中的定義,集合就是“一堆東西”。集合里的“東西”,叫作元素。若然 x 是集合 A 的元素,記作 x ∈ A。
集合是現代數學中一個重要的基本概念。集合論的基本理論直到十九世紀末才被創立,現在已經是數學教育中一個普遍存在的部分,在小學時就開始學習了。這里對被數學家們稱為“直觀的”或“樸素的”集合論進行一個簡短而基本的介紹;更詳細的分析可見樸素集合論。對集合進行嚴格的公理推導可見公理化集合論。
在計算機中,集合是什么呢?同樣來自維基百科,這么說的:
在計算機科學中,集合是一組可變數量的數據項(也可能是0個)的組合,這些數據項可能共享某些特征,需要以某種操作方式一起進行操作。一般來講,這些數據項的類型是相同的,或基類相同(若使用的語言支持繼承)。列表(或數組)通常不被認為是集合,因為其大小固定,但事實上它常常在實現中作為某些形式的集合使用。
集合的種類包括列表,集,多重集,樹和圖。枚舉類型可以是列表或集。
不管是否明白,貌似很厲害呀.
是的,所以本講僅僅是對集合有一個入門.關于集合的更多操作如運算/比較等,還沒有涉及呢.
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/37344.html
摘要:前端之前端之前言前言昨天學習了標記式語言,也就是無邏輯語言。今天學習,被稱之為網頁的化妝師。為前端頁面的樣式,由選擇器作用域與樣式塊組成。年初,組織負責的工作組開始討論第一版中沒有涉及到的問題。其討論結果組成了年月出版的規范第二版。前端之 CSS 前言 昨天學習了標記式語言,也就是無邏輯語言。了解了網頁的骨架是什么構成的,了解了常用標簽,兩個指令以及轉義字符;其中標簽可以分為兩大類: 一類...
摘要:比如表示上下左右都是像素塊元素居中的樣式,表示上下表示左右而表示上,左右,下。瀏覽器對塊元素的默認樣式問題如下塊元素的盒模型樣式復合屬性寫法如果我們想給添加樣式,可以這樣寫為了精簡代碼,也可以采用如下的復合屬性寫法 學習 HTML 和 CSS 將近一個月,我以為:層級(嵌套)關系和盒模型(Box Model)是理解和學習這兩門語言的基石,正如圖層概念是 Photoshop 的基礎。因此...
摘要:凍結的集合前面一節講述了集合的基本概念,注意,那里所涉及到的集合都是可原處修改的集合。元素與集合的關系元素是否屬于某個集合。 凍結的集合 前面一節講述了集合的基本概念,注意,那里所涉及到的集合都是可原處修改的集合。還有一種集合,不能在原處修改。這種集合的創建方法是: >>> f_set = frozenset(qiwsir) #看這個名字就知道了frozen,凍結的set ...
摘要:前言本篇主要介紹基本數據類型,以文本進度條為例,介紹庫的使用。 前言 本篇主要介紹基本數據類型,以文本進度條為例,介紹time庫的使用。 并在最后對蟒蛇繪制的代碼進...
摘要:一般用進程池維護,的設為數量。多線程爬蟲多線程版本可以在單進程下進行異步采集,但線程間的切換開銷也會隨著線程數的增大而增大。異步協程爬蟲引入了異步協程語法。 Welcome to the D-age 對于網絡上的公開數據,理論上只要由服務端發送到前端都可以由爬蟲獲取到。但是Data-age時代的到來,數據是新的黃金,毫不夸張的說,數據是未來的一切。基于統計學數學模型的各種人工智能的出現...
閱讀 1487·2021-11-24 11:16
閱讀 2689·2021-07-28 12:32
閱讀 2302·2019-08-30 11:22
閱讀 1440·2019-08-30 11:01
閱讀 595·2019-08-29 16:24
閱讀 3547·2019-08-29 12:52
閱讀 1625·2019-08-29 12:15
閱讀 1332·2019-08-29 11:18