1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        【Python基礎(chǔ)】Python的元組,沒想象的那么簡單

        2021-02-13 11:20

        Python的元組與列表類似,元組一旦創(chuàng)建,元組中的數(shù)據(jù)一旦確立就不能改變,不能對元組中中的元素進行增刪改操作,因此元組沒有增加元素append、更新元素update、彈出元素pop等相關(guān)方法,只有簡單的索引和計數(shù)的方法。

        ?

        列表不能作為字典的key, 而元組可以;列表不能做為集合的項,而元組可以。列表是不可哈希unhashable的,列表元素可以被動態(tài)改變,所以沒有一個固定不變的哈希值-這與集合要求的元素唯一性沖突;而元組的元素被禁止更新,其哈希值在整個生命周期都不會變化,因此可以成為集合的元素。

        ?

        元組中可以包含任何數(shù)據(jù)類型,也可以包含另一個元組,如:T=(1,2,3,('a','b'))

        空元組(沒有元素的元組):T=(),含1個元素的元組:T=(1,),注意有逗號,多個元素的元組:T=(1,2,3)

        ?

        一、元組的創(chuàng)建

        可以用多種方式構(gòu)建元組,主要有以下四種,每個都會有相應(yīng)的案例:

        使用一對圓括號來表示空元組:?()

        使用一個后綴的逗號來表示單元組:?a,?或?(a,)

        使用以逗號分隔的多個項:?a,?b,?c?or?(a,?b,?c)

        使用內(nèi)置的?tuple():?tuple()?或?tuple(iterable)

        '''1、使用一對圓括號來表示空元組: ()'''num_tuple = (1, 2, 3)
        '''2、使用一個后綴的逗號來表示單元組: a, 或 (a,)'''a = 'a',a('a',)type(a)tuple
        '''3、使用以逗號分隔的多個項: a, b, c or (a, b, c)'''t = 1,2,3t(1, 2, 3)type(t)tuplet = 1,2,3,#結(jié)尾多一個逗號也沒事,一樣的效果
        '''4、使用內(nèi)置的 tuple(): tuple() 或 tuple(iterable)'''t = (1, 2, 3)t = tuple([1, 2
        注意:使用元組的時候,如果只有一個元素記得加上一個逗號,不然就是一條賦值語句。
        #表達式?一個賦值語句t = (1) #用type查看下類型,是整數(shù)類型,并不是tuple類型type(t)int
        t = (1,) #加逗號元組



        二、元組的方法

        由于元組并不能夠像列表一樣修改,因此元組并沒有特別多的方法,就兩個方法,count和index。

        print(dir(tuple))['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index']

        1、index

        作用:tuple的index方法:獲取指定元素的下標(biāo)(就近原則,從左往右,找到第一個就結(jié)束)

        用法:index(self, value, start=None, stop=None)

        參數(shù):

        • value-待查詢下標(biāo)的元素

        • start-查詢起始下標(biāo)

        • stop-查詢終止下標(biāo)(查詢到stop前一個下標(biāo)) ?

        t=('s','a','a','r',5)t.index('r')3t.index(5)4# index方法:根據(jù)元素找到其位置t = (1, 2, 3, 1, 2)t.index(1, 2)  # 尋找第2個元素1的位置

        2、count

        作用:獲取指定元素在元組中出現(xiàn)的次數(shù)

        用法:count(self, value) ?

        參數(shù):value-待查詢出現(xiàn)次數(shù)的元素

        t.count('a')2t.count(5)1

        3、其他操作

        先生成兩個元組備用

        s1=(1,2,3) s2=('a','b','c')

        1)拼接生成新元組

        '''拼接生成新元組''' s1+s2(1, 2, 3, 'a', 'b', 'c')s1.__add__(s2) (1, 2, 3, 'a', 'b', 'c')

        2)是否包含

        '''是否包含'''2 in s1True?s1.__contains__('a') Falses2.__contains__('a') True

        3)獲取元素

        '''獲取元素'''s1[0]1 s2.__getitem__(0) 'a'

        4)獲取長度

        '''獲取長度 '''len(s1)3s1.__len__()3

        5)重復(fù)拼接

        '''重復(fù)拼接'''s1*3(1, 2, 3, 1, 2, 3, 1, 2, 3)

        6)刪除元組

        元祖中的元素值不可以修改和刪除,但是我們可以使用 del 關(guān)鍵字刪除整個元組。

        t= ("a", "b", "c")del ttname 't' is not defined

        7)最大最小值

        t= (10, 22, 0, 15, 40)max(t)40min(t)0

        ?

        三、命名元組

        對于元組,這個特性,我認為,才是元組存在的意義所在。只講命名元組,可能不太好理解。如果稱之為帶字段名的記錄,你可能就清楚了。

        這里舉個例子,但是實現(xiàn)帶字段名,需要另一個庫(collections)的支持,你需要導(dǎo)入它。

        from collections import namedtuple#生成一個City類City = namedtuple("City", "name country polulation coordinates")#實例化tokyo = City("Tokyo", 'JP', '36.93', ('35.68','139,69'))print(tokyo)City(name='Tokyo', country='JP', polulation='36.93', coordinates=('35.68', '139,69'))print(tokyo.name)Toky

        看著有點像字典,是不是,但是他不是字典(獲取數(shù)值的方法也與字典不同),字典是可變。元組在創(chuàng)建后,就無法再對其進行修改。這在某個程度上說明元組適合存放那些無需修改的數(shù)據(jù)。比如上面的,地名,國家,經(jīng)緯度。

        除了上面的用法之處,這里還要介紹一些元組自己專有的屬性。

        # 打印字段名print(City._fields)('name', 'country', 'polulation', 'coordinates')
        # 生成新實例LatLong = namedtuple('LatLong', 'lat long')Xiamen_tuple = ('Xiemen', 'China', '40,54', LatLong(24.26,118.03))Xiamen = City._make(Xiamen_tuple)
        print(Xiamen)City(name='Xiemen', country='China', polulation='40,54', coordinates=(24.26, 118.03))
        # 將具名元組轉(zhuǎn)為OrderDictXiamen_dict = Xiamen._asdict()print(Xiamen_dict)OrderedDict([('name', 'Xiemen'), ('country', 'China'), ('polulation', '40,54'), ('coordinates', LatLong(lat=24.26, long=118.03))])

        總結(jié)一下,元組是一種很強大的可以當(dāng)作記錄來用的數(shù)據(jù)類型,這才是他存在的價值和意義所在。而為人所熟知的,它的第二個角色才是充當(dāng)一個不可變的列表。(以上都是個人看法,如有不同見解,歡迎留言討論)


        ?

        四、與列表的比較

        類似的問題, 建議移步 StackOverflow 或者 python doc。

        https://stackoverflow.com/questions/626759/whats-the-difference-between-lists-and-tuples

        https://docs.python.org/zh-cn/3/library/stdtypes.html#sequence-types-list-tuple-range

        翻譯部分觀點如下:

        1、Tuples are immutable, lists are mutable.

        元組是不可變的, 而列表是可變的。

        ?

        2、Tuples are heterogeneous data structures, lists are homogeneous sequences. Tuples have structure, lists have order.

        元組通常由不同的數(shù)據(jù),而列表是相同類型的數(shù)據(jù)隊列。元組表示的是結(jié)構(gòu),而列表表示的是順序。舉個例子來講:當(dāng)你想記錄棋盤上一個子的坐標(biāo)時, 應(yīng)該使用元組; 當(dāng)你想記錄棋盤上所有的子的坐標(biāo)(一系列相同的數(shù)據(jù))時,應(yīng)該使用列表。

        # 表示一個點point = (1, 2)
        # 表示一系列點points = [(1, 2), (1, 3), (4, 5)]

        3、 You can't use list as a dictionary identifier.

        你不能將列表當(dāng)作字典的key, 而元組可以。

        a = (1, 2)b = [4, 5]
        c = {a: 'start point'} # OK {(1, 2): 'start point'}c = {b: 'end point'} # Error

        ?

        4、Due to the smaller size of a tuple operation with it a bit faster but not that much to mention about until you have a huge amount of elements.

        由于元組支持的操作比列表小, 所以元組會比列表稍稍快上那么一丟丟。但是除非你有巨量的數(shù)據(jù)要去處理,否者這一點不需要特別強調(diào)。


        往期精彩回顧





        本站qq群704220115,加入微信群請掃碼:

        瀏覽 7
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            少妇性影院爽爽爽爽爽爽 | 伊人导航 | 日屄无码 | 亚欧成人 | 日本中文字幕在线视频 | 成人91色情A片 | 99精品丰满人妻无码 | 豆奶狼友视频在线长毛片 | 巨乳巨乳の少妇 | 精品 国产区一区二 |