Python學習—元組與集合

來源:互聯網
上載者:User

標籤:python學習   並且   nan   got   mos   中括弧   長度   數學   沒有   

1.元組(tuple)

Python 的元組與列表類似,不同之處在於元組的元素不能修改。元組使用小括弧,列表使用方括弧。

1.元組定義

(1).定義一個tuple時,在定義的時候,tuple的元素就必須被確定下來,並且以後不可更改其值。

>>> tup1 = (‘this‘,‘is‘,‘aaaa‘)>>> tup2 = (1,2,3,4)>>> tup3 = (1,2,3,‘ssss‘)>>> tup4 = ‘aa‘,‘bb‘,‘cc‘,‘dd‘;    #不用括弧也可以定義元組>>> type(tup4)<class ‘tuple‘>      #可以看到tup4是元組

(2).需要注意:元組中只包含一個元素時,需要在元素後面添加逗號,否則括弧會被當作運算子使用。

>>>tup1 = (50)>>> type(tup1)     # 不加逗號,類型為整型<class ‘int‘>>>> tup1 = (50,)>>> type(tup1)     # 加上逗號,類型為元組<class ‘tuple‘>

這是因為括弧()既可以表示tuple,又可以表示數學公式中的小括弧,這就產生了歧義,因此,Python規定,這種情況下,小括弧表示數學符號,因此tup1是整型。所以,只有1個元素的tuple定義時必須加一個逗號,,來消除歧義。

(3).建立空元組

>>> tup1 = ()      #用括弧來建立空元組>>> type(tup1)<class ‘tuple‘>>>> tup1()              #可以看到元組裡沒有值,為空白

(4).最後來看一個“可變的”tuple:

>>> t = (‘a‘, ‘b‘, [‘A‘, ‘B‘])>>> t[2][0] = ‘X‘>>> t[2][1] = ‘Y‘>>> t(‘a‘, ‘b‘, [‘X‘, ‘Y‘])

這個tuple定義的時候有3個元素,分別是‘a‘,‘b‘和一個list。不是說tuple一旦定義後就不可變了嗎?怎麼後來又變了?
我們先看看定義的時候tuple包含的3個元素:

當我們把list的元素‘A‘和‘B‘修改為‘X‘和‘Y‘後,tuple變為:

表面上看,tuple的元素確實變了,但其實變的不是tuple的元素,而是list的元素。tuple一開始指向的list並沒有改成別的list,所以,tuple所謂的“不變”是說,tuple的每個元素,指向永遠不變。即指向‘a‘,就不能改成指向‘b‘,指向一個list,就不能改成指向其他對象,但指向的這個list本身是可變的!
所以要建立一個內容也不變的tuple那就必須保證tuple的每一個元素本身也不能變,即是不可變資料類型。

2.訪問元組(索引)

元組可以使用中括弧加下標索引來訪問元組中的值。

>>> tup1 = (‘this‘,‘is‘,‘aaaa‘)>>> tup1[0]‘this‘>>> tup1[1]‘is‘>>> tup1[-1]‘aaaa‘
3.刪除元組

元組中的元素值是不允許刪除的,但我們可以使用del語句來刪除整個元組

>>> tup4(‘aa‘, ‘bb‘, ‘cc‘, ‘dd‘)>>> del tup4>>> tup4Traceback (most recent call last):  File "<stdin>", line 1, in <module>NameError: name ‘tup4‘ is not defined     #可以看到,刪除元組後再查看元組,錯誤資訊提示元組未被定義
4.元組特性

(1).切片
和列表的切片一樣,使用中括弧。

>>> tup3(‘this‘, ‘is‘, ‘aaaa‘, 1, 2, 3, 4)>>> tup3[:](‘this‘, ‘is‘, ‘aaaa‘, 1, 2, 3, 4)>>> tup3[2:](‘aaaa‘, 1, 2, 3, 4)>>> tup3[:-1](‘this‘, ‘is‘, ‘aaaa‘, 1, 2, 3)>>> tup3[::-1](4, 3, 2, 1, ‘aaaa‘, ‘is‘, ‘this‘)>>> tup3[::-2](4, 2, ‘aaaa‘, ‘this‘)

(2).重複
與列表一樣,使用符號*

>>> tup2(1, 2, 3, 4)>>> tup3 * 2(‘this‘, ‘is‘, ‘aaaa‘, 1, 2, 3, 4, ‘this‘, ‘is‘, ‘aaaa‘, 1, 2, 3, 4)

(3).串連
與列表一樣,使用符號+

>>> tup1 = (‘this‘,‘is‘,‘aaaa‘)>>> tup2 = (1,2,3,4)>>> tup3 = tup1 + tup2>>> tup3(‘this‘, ‘is‘, ‘aaaa‘, 1, 2, 3, 4)

(4).成員操作符
與列表一樣,使用符號:in與not in

>>> tup3(‘this‘, ‘is‘, ‘aaaa‘, 1, 2, 3, 4)>>> ‘aaaa‘ in tup3True>>> 2 in tup3True>>> 4 not in tup3False
5.元組內建函數
Python元組包含了以下內建函數
方法 描述
len(tuple) 計算元組元素個數。
max(tuple) 返回元組中元素最大值。
min(tuple) 返回元組中元素最小值。
tuple(seq) 將列錶轉換為元組。
2.集合

沒有重複的資料,可以有不同資料類型。集合(set)是一個無序不重複元素的序列(所以不支援索引、切片、重複)。
可以使用大括弧 { } 或者 set() 函數建立集合.
注意:建立一個空集合必須用 set() 而不是 { },因為 { } 是用來建立一個空字典。當用set()建立的集合有多個個元素時,需要將所有的元素再用括弧括起來,否則會報錯。

1.集合定義
>>> sett = {1,2,3,4}   >>> sett{1, 2, 3, 4}>>> s = {1,2,‘hh‘,‘ee‘}>>> s{1, 2, ‘ee‘, ‘hh‘}>>> set1 = {‘apple‘, ‘orange‘, ‘pear‘, ‘banana‘}>>> set1{‘orange‘, ‘pear‘, ‘apple‘, ‘banana‘}>>> set2  = {‘apple‘, ‘orange‘, ‘apple‘, ‘pear‘, ‘orange‘, ‘banana‘}    >>> set2{‘orange‘, ‘pear‘, ‘apple‘, ‘banana‘}     #集合的去重(集合中不允許有相同的資料,有也只會記錄一次,自動將重複的資料省略)>>> ss = set(‘aa‘,‘bb‘)         Traceback (most recent call last):  File "<stdin>", line 1, in <module>TypeError: set expected at most 1 arguments, got 2    #set()定義多個元素的集合報錯>>> ss = set((‘aa‘,‘bb‘))    #不會報錯>>> ss                    {‘aa‘, ‘bb‘}

定義空集合:

>>>  s = set()>>> sset()>>> type(s)<class ‘set‘>
2.添加元素:set.add(x)

向已經存在的集合中添加一個元素。如果元素已存在,則不進行任何操作,如果添加多個元素,則會報錯。

>>> set1 = {‘aa‘,‘ab‘,1,2}>>> set1{‘ab‘, 1, ‘aa‘, 2}>>> set1.add(‘cc‘)>>> set1{1, 2, ‘cc‘, ‘ab‘, ‘aa‘}>>> set1.add(8,9) Traceback (most recent call last):  File "<stdin>", line 1, in <module>TypeError: add() takes exactly one argument (2 given)

還有一個方法,也可以添加元素,且參數是列表,元組,字典,集合,字串,不能是整數。文法格式如下:
set.update( x )
x 可以有多個,用逗號分開。

>>>set2 = {"Google", "RBQ", "Taobao"}>>> set2{‘RBQ‘, ‘Taobao‘, ‘Google‘}>>> set2.update({1,3})>>> set2{1, 3, ‘Google‘, ‘Taobao‘, ‘RBQ‘}>>> set2.update([1,4],[5,6])  >>> set2{1, 3, 4, 5, 6, ‘Google‘, ‘Taobao‘, ‘RBQ‘}>>> set2.update(88) Traceback (most recent call last):  File "<stdin>", line 1, in <module>TypeError: ‘int‘ object is not iterable

另外再添加字串的時候,還有一個有趣的現象。

>>> set2.update(‘s‘)>>> set2{1, 3, 4, 5, 6, ‘Google‘, ‘Taobao‘, ‘RBQ‘,‘s‘}>>> set2.update(‘ssss‘)>>> set2{1, 3, 4, 5, 6, ‘Google‘, ‘Taobao‘, ‘RBQ‘,‘s‘}    #添加了‘ssss‘結果集合中沒有。>>> set2.remove(‘s‘)>>> set2{1, ‘RBQ‘, 3, 4, ‘Taobao‘, ‘Google‘, 5, 6}      #刪除了元素‘s‘>>> set2.update(‘ssss‘)>>> set2{1, ‘RBQ‘, 3, 4, ‘Taobao‘, ‘Google‘, 5, 6, ‘s‘}    #重新添加元素‘ssss‘結果集合出現了一個‘s‘>>> set2.update(‘sss1‘)>>> set2{1, 3, 4, 5, 6, ‘RBQ‘, ‘Taobao‘, ‘1‘, ‘s‘, ‘Google‘}   #添加‘sss1‘結果出現了‘1‘>>> set2.update(‘sa‘)  >>> set2{1, 3, 4, 5, 6, ‘RBQ‘, ‘Taobao‘, ‘1‘, ‘a‘, ‘s‘, ‘Google‘}   #添加‘sa‘出現了‘a‘

此外還有一個方法也是移除集合中的元素,且如果元素不存在,不會發生錯誤。格式如下所示:
set.discard( x )

>>> set1.discard(‘RBQ‘)>>> set1{‘ALI‘}>>> set1.discard(‘ddd‘)>>> set1{‘ALI‘}

還可以彈出的方式來刪除集合中的一個元素,它會返回彈出的元素。文法格式如下:
set.pop()

>>> set2{1, 3, 4, 5, 6, ‘RBQ‘, ‘Taobao‘, ‘1‘, ‘a‘, ‘s‘, ‘Google‘}>>> set2.pop()1>>> set2{3, 4, 5, 6, ‘RBQ‘, ‘Taobao‘, ‘1‘, ‘a‘, ‘s‘, ‘Google‘}>>> set2.pop()3>>> set2.pop()4
3.移除元素:set.remove(x)

向已經存在的集合中添加元素。如果元素不存在,則會發生錯誤。

>>> set1 = {"ALI", "RBQ", "TB"}>>> set1{‘RBQ‘, ‘ALI‘, ‘TB‘}>>> set1.remove("TB")>>> set1{‘RBQ‘, ‘ALI‘}>>> set1.remove("TTTT")Traceback (most recent call last):  File "<stdin>", line 1, in <module>KeyError: ‘TTTT‘
4.成員操作符:in和not in
>>> set2{5, 6, ‘RBQ‘, ‘Taobao‘, ‘1‘, ‘a‘, ‘s‘, ‘Google‘}>>> ‘RBQ‘ in set2True>>> 2 not in set2True>>> 6 not in set2False
5.集合運算:
    並集;s1.union(s2) 或者 s1 | s2    交集:s1.intersection(s2) 或者 s1 | s2    差集:s1.difference(s2) 或者 s1 - s2         s2.denfference(s1) 或者 s2 - s1    對差等分(並集-交集):s1.symmetric_difference(s2) 或者 s1 ^ s2
6.兩個集合函數

(1).求集合長度:len(set)

>>> set2{5, 6, ‘RBQ‘, ‘Taobao‘, ‘1‘, ‘a‘, ‘s‘, ‘Google‘}>>> len(set2)8

(2).清空集合:set.clear()

>>> set2{5, 6, ‘RBQ‘, ‘Taobao‘, ‘1‘, ‘a‘, ‘s‘, ‘Google‘}>>> set2.clear()>>> set2set()

Python學習—元組與集合

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.