成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

[零基礎(chǔ)學(xué)Python]一二三,集合了

CastlePeaK / 1077人閱讀

摘要:最簡單的說法,即是在最原始的集合論樸素集合論中的定義,集合就是一堆東西。若然是集合的元素,記作。這里對被數(shù)學(xué)家們稱為直觀的或樸素的集合論進(jìn)行一個(gè)簡短而基本的介紹更詳細(xì)的分析可見樸素集合論。對集合進(jìn)行嚴(yán)格的公理推導(dǎo)可見公理化集合論。

回顧一下已經(jīng)了解的數(shù)據(jù)類型:int/str/bool/list/dict/tuple

還真的不少了.

不過,python是一個(gè)發(fā)展的語言,沒準(zhǔn)以后還出別的呢.看官可能有疑問了,出了這么多的數(shù)據(jù)類型,我也記不住呀,特別是里面還有不少方法.

不要擔(dān)心記不住,你只要記住愛因斯坦說的就好了.

  

愛因斯坦在美國演講,有人問:“你可記得聲音的速度是多少?你如何記下許多東西?”

  

愛因斯坦輕松答道:“聲音的速度是多少,我必須查辭典才能回答。因?yàn)槲覐膩聿挥浽谵o典上已經(jīng)印著的東西,我的記憶力是用來記憶書本上沒有的東西。

多么霸氣的回答,這回答不僅僅霸氣,更是在告訴我們一種方法:只要能夠通過某種方法查找到的,就不需要記憶.

那么,上面那么多數(shù)據(jù)類型的各種方法,都不需要記憶了,因?yàn)樗鼈兌伎梢酝ㄟ^下述方法但不限于這些方法查到(這句話的邏輯還是比較嚴(yán)密的,包括但不限于...)

交互模式下用dir()或者h(yuǎn)elp()

google(不推薦Xdu,原因自己體會啦)

為了能夠在總體上對已經(jīng)學(xué)習(xí)過的數(shù)據(jù)類型有了解,我們不妨做如下分類:

是否為序列類型:即該數(shù)據(jù)的元素是否能夠索引.其中序列類型的包括str/list/tuple

是否可以原處修改:即該數(shù)據(jù)的元素是否能夠原處修改(特別提醒看官,這里說的是原處修改問題,有的資料里面說str不能修改,也是指原處修改問題.為了避免誤解,特別強(qiáng)調(diào)了原處).能夠原處修改的是list/dict(特別說明,dict的鍵必須是不可修改的,dict的值可原處修改)

什么原處修改?看官能不能在交互模式下通過實(shí)例解釋一下?

到這里,看官可千萬不要以為本講是復(fù)習(xí)課.本講的主要內(nèi)容不是復(fù)習(xí),主要內(nèi)容是要向看官介紹一種新的數(shù)據(jù)類型:集合(set).徹底暈倒了,到底python有多少個(gè)數(shù)據(jù)類型呢?又多出來了一個(gè).

從基本道理上說,python中的數(shù)據(jù)類型可以很多,因?yàn)槊總€(gè)人都可以自己定義一種數(shù)據(jù)類型.但是,python官方認(rèn)可或者說內(nèi)置的數(shù)據(jù)類型,就那么幾種了.基本上今天的set講完,就差不多了.在以后的開發(fā)過程中,包括今天和以往介紹的數(shù)據(jù)類型,是常用的.當(dāng)然,自己定義一個(gè)也可以,但是用原生的更好.

創(chuàng)建set

tuple算是list和str的雜合(雜交的都有自己的優(yōu)勢,上一節(jié)的末后已經(jīng)顯示了),那么set則可以堪稱是list和dict的雜合.

set擁有類似dict的特點(diǎn):可以用{}花括號來定義;其中的元素沒有序列,也就是是非序列類型的數(shù)據(jù);而且,set中的元素不可重復(fù),這就類似dict的鍵.

set也有繼承了一點(diǎn)list的特點(diǎn):如可以原處修改(事實(shí)上是一種類別的set可以原處修改,另外一種不可以).

下面通過實(shí)驗(yàn),進(jìn)一步理解創(chuàng)建set的方法:

>>> s1 = set("qiwsir")  #把str中的字符拆解開,形成set.特別注意觀察:qiwsir中有兩個(gè)i
>>> s1                  #但是在s1中,只有一個(gè)i,也就是不能重復(fù)
set(["q", "i", "s", "r", "w"])

>>> s2 = set([123,"google","face","book","facebook","book"])    #通過list創(chuàng)建set.不能有重復(fù),元素可以是int/str
>>> s2
set(["facebook", 123, "google", "book", "face"])                #元素順序排列不是按照指定順序

>>> s3 = {"facebook",123}       #通過{}直接創(chuàng)建
>>> s3
set([123, "facebook"])

再大膽做幾個(gè)探究,請看官注意觀察結(jié)果:

>>> 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"

從上述實(shí)驗(yàn)中,可以看出,通過{}無法創(chuàng)建含有l(wèi)ist/dict元素的set.

繼續(xù)探索一個(gè)情況:

>>> 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做了一個(gè)對比,雖然說兩者都能夠做原處修改,但是,通過索引編號(偏移量)的方式,直接修改,list允許,但是set報(bào)錯(cuò).

那么,set如何修改呢?

更改set

還是用前面已經(jīng)介紹過多次的自學(xué)方法,把set的有關(guān)內(nèi)置函數(shù)找出來,看看都可以對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()可以找到每個(gè)函數(shù)的具體使用方法,下面列幾個(gè)例子:

增加元素
>>> help(set.add)

Help on method_descriptor:

add(...)
Add an element to a set.  
This has no effect if the element is already present.

下面在交互模式這個(gè)最好的實(shí)驗(yàn)室里面做實(shí)驗(yàn):

>>> a_set = {}              #我想當(dāng)然地認(rèn)為這樣也可以建立一個(gè)set
>>> a_set.add("qiwsir")     #報(bào)錯(cuò).看看錯(cuò)誤信息,居然告訴我dict沒有add.我分明建立的是set呀.
Traceback (most recent call last):
  File "", line 1, in 
AttributeError: "dict" object has no attribute "add"
>>> type(a_set)             #type之后發(fā)現(xiàn),計(jì)算機(jī)認(rèn)為我建立的是一個(gè)dict     

特別說明一下,{}這個(gè)東西,在dict和set中都用.但是,如上面的方法建立的是dict,不是set.這是python規(guī)定的.要建立set,只能用前面介紹的方法了.

>>> a_set = {"a","i"}       #這回就是set了吧
>>> type(a_set)
                #果然

>>> a_set.add("qiwsir")     #增加一個(gè)元素
>>> a_set                   #原處修改,即原來的a_set引用對象已經(jīng)改變
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])      #這樣做是不行滴,跟前面一樣,報(bào)錯(cuò).
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"])

除了上面的增加元素方法之外,還能夠從另外一個(gè)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中任意選一個(gè)刪除,并返回該值
"[1,2,3]"
>>> b_set.pop()
"h"
>>> b_set.pop()
"o"
>>> b_set
set(["n", "p", "t", "qiwsir", "y"])

>>> b_set.pop("n")  #如果要指定刪除某個(gè)元素,報(bào)錯(cuò)了.
Traceback (most recent call last):
  File "", line 1, in 
TypeError: pop() takes no arguments (1 given)

set.pop()是從set中任意選一個(gè)元素,刪除并將這個(gè)值返回.但是,不能指定刪除某個(gè)元素.報(bào)錯(cuò)信息中就告訴我們了,pop()不能有參數(shù).此外,如果set是空的了,也報(bào)錯(cuò).這條是幫助信息告訴我們的,看官可以試試.

要?jiǎng)h除指定的元素,怎么辦?

>>> 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中的元素,否則就報(bào)錯(cuò).試一試:

>>> 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)類似的還有一個(gè)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")
>>>

在刪除上還有一個(gè)絕殺,就是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
知識

集合,也是一個(gè)數(shù)學(xué)概念(以下定義來自維基百科)

  

集合(或簡稱集)是基本的數(shù)學(xué)概念,它是集合論的研究對象。最簡單的說法,即是在最原始的集合論─樸素集合論─中的定義,集合就是“一堆東西”。集合里的“東西”,叫作元素。若然 x 是集合 A 的元素,記作 x ∈ A。

  

集合是現(xiàn)代數(shù)學(xué)中一個(gè)重要的基本概念。集合論的基本理論直到十九世紀(jì)末才被創(chuàng)立,現(xiàn)在已經(jīng)是數(shù)學(xué)教育中一個(gè)普遍存在的部分,在小學(xué)時(shí)就開始學(xué)習(xí)了。這里對被數(shù)學(xué)家們稱為“直觀的”或“樸素的”集合論進(jìn)行一個(gè)簡短而基本的介紹;更詳細(xì)的分析可見樸素集合論。對集合進(jìn)行嚴(yán)格的公理推導(dǎo)可見公理化集合論。

在計(jì)算機(jī)中,集合是什么呢?同樣來自維基百科,這么說的:

  

在計(jì)算機(jī)科學(xué)中,集合是一組可變數(shù)量的數(shù)據(jù)項(xiàng)(也可能是0個(gè))的組合,這些數(shù)據(jù)項(xiàng)可能共享某些特征,需要以某種操作方式一起進(jìn)行操作。一般來講,這些數(shù)據(jù)項(xiàng)的類型是相同的,或基類相同(若使用的語言支持繼承)。列表(或數(shù)組)通常不被認(rèn)為是集合,因?yàn)槠浯笮」潭?,但事?shí)上它常常在實(shí)現(xiàn)中作為某些形式的集合使用。

  

集合的種類包括列表,集,多重集,樹和圖。枚舉類型可以是列表或集。

不管是否明白,貌似很厲害呀.

是的,所以本講僅僅是對集合有一個(gè)入門.關(guān)于集合的更多操作如運(yùn)算/比較等,還沒有涉及呢.

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/37344.html

相關(guān)文章

  • 前端(二)之 CSS

    摘要:前端之前端之前言前言昨天學(xué)習(xí)了標(biāo)記式語言,也就是無邏輯語言。今天學(xué)習(xí),被稱之為網(wǎng)頁的化妝師。為前端頁面的樣式,由選擇器作用域與樣式塊組成。年初,組織負(fù)責(zé)的工作組開始討論第一版中沒有涉及到的問題。其討論結(jié)果組成了年月出版的規(guī)范第二版。前端之 CSS 前言 昨天學(xué)習(xí)了標(biāo)記式語言,也就是無邏輯語言。了解了網(wǎng)頁的骨架是什么構(gòu)成的,了解了常用標(biāo)簽,兩個(gè)指令以及轉(zhuǎn)義字符;其中標(biāo)簽可以分為兩大類: 一類...

    張率功 評論0 收藏0
  • 盒模型二三(一):盒世界,知幾何

    摘要:比如表示上下左右都是像素塊元素居中的樣式,表示上下表示左右而表示上,左右,下。瀏覽器對塊元素的默認(rèn)樣式問題如下塊元素的盒模型樣式復(fù)合屬性寫法如果我們想給添加樣式,可以這樣寫為了精簡代碼,也可以采用如下的復(fù)合屬性寫法 學(xué)習(xí) HTML 和 CSS 將近一個(gè)月,我以為:層級(嵌套)關(guān)系和盒模型(Box Model)是理解和學(xué)習(xí)這兩門語言的基石,正如圖層概念是 Photoshop 的基礎(chǔ)。因此...

    tuantuan 評論0 收藏0
  • [基礎(chǔ)學(xué)Python]集合的關(guān)系

    摘要:凍結(jié)的集合前面一節(jié)講述了集合的基本概念,注意,那里所涉及到的集合都是可原處修改的集合。元素與集合的關(guān)系元素是否屬于某個(gè)集合。 凍結(jié)的集合 前面一節(jié)講述了集合的基本概念,注意,那里所涉及到的集合都是可原處修改的集合。還有一種集合,不能在原處修改。這種集合的創(chuàng)建方法是: >>> f_set = frozenset(qiwsir) #看這個(gè)名字就知道了frozen,凍結(jié)的set ...

    EdwardUp 評論0 收藏0
  • Python——基本數(shù)據(jù)類型(模塊2: time庫的使用)(實(shí)例3:文本進(jìn)度條)

    摘要:前言本篇主要介紹基本數(shù)據(jù)類型,以文本進(jìn)度條為例,介紹庫的使用。 前言 本篇主要介紹基本數(shù)據(jù)類型,以文本進(jìn)度條為例,介紹time庫的使用。 并在最后對蟒蛇繪制的代碼進(jìn)...

    Jenny_Tong 評論0 收藏0
  • 關(guān)于Python爬蟲種類、法律、輪子的二三

    摘要:一般用進(jìn)程池維護(hù),的設(shè)為數(shù)量。多線程爬蟲多線程版本可以在單進(jìn)程下進(jìn)行異步采集,但線程間的切換開銷也會隨著線程數(shù)的增大而增大。異步協(xié)程爬蟲引入了異步協(xié)程語法。 Welcome to the D-age 對于網(wǎng)絡(luò)上的公開數(shù)據(jù),理論上只要由服務(wù)端發(fā)送到前端都可以由爬蟲獲取到。但是Data-age時(shí)代的到來,數(shù)據(jù)是新的黃金,毫不夸張的說,數(shù)據(jù)是未來的一切。基于統(tǒng)計(jì)學(xué)數(shù)學(xué)模型的各種人工智能的出現(xiàn)...

    lscho 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<