本篇內(nèi)容介紹了“Python中怎么定義和使用元組”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
創(chuàng)新互聯(lián)公司是一家專業(yè)提供景東企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站制作、網(wǎng)站建設(shè)、HTML5建站、小程序制作等業(yè)務(wù)。10年已為景東眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計(jì)公司優(yōu)惠進(jìn)行中。在Python中,元組也是多個(gè)元素按照一定的順序構(gòu)成的序列。元組和列表的不同之處在于,元組是不可變類型,這就意味著元組類型的變量一旦定義,其中的元素不能再添加或刪除,而且元素的值也不能進(jìn)行修改。定義元組通常使用()字面量語法,元組類型支持的運(yùn)算符跟列表是一樣。下面的代碼演示了元組的定義和運(yùn)算。
# 定義一個(gè)三元組
t1 = (30,
10,
55)
# 定義一個(gè)四元組
t2 = ('駱昊',
40, True,
'四川成都')
# 查看變量的類型
print(type(t1),
type(t2)) # <class
'tuple'> <class
'tuple'>
# 查看元組中元素的數(shù)量
print(len(t1),
len(t2)) #
3 4
# 通過索引運(yùn)算獲取元組中的元素
print(t1[0], t1[-3]) #
30 30
print(t2[3], t2[-1]) # 四川成都 四川成都
# 循環(huán)遍歷元組中的元素
for member in t2:
print(member)
# 成員運(yùn)算
print(100 in t1) # False
print(40 in t2) # True
# 拼接
t3 = t1 + t2
print(t3) # (30,
10,
55,
'駱昊',
40, True,
'四川成都')
# 切片
print(t3[::3]) # (30,
'駱昊',
'四川成都')
# 比較運(yùn)算
print(t1 == t3) # False
print(t1 >= t3) # False
print(t1 < (30,
11,
55)) # True
一個(gè)元組中如果有兩個(gè)元素,我們就稱之為二元組;一個(gè)元組中如果五個(gè)元素,我們就稱之為五元組。需要提醒大家注意的是,()表示空元組,但是如果元組中只有一個(gè)元素,需要加上一個(gè)逗號(hào),否則()就不是代表元組的字面量語法,而是改變運(yùn)算優(yōu)先級(jí)的圓括號(hào),所以('hello', )和(100, )才是一元組,而('hello')和(100)只是字符串和整數(shù)。我們可以通過下面的代碼來加以驗(yàn)證。
# 空元組
a = ()
print(type(a)) # <class
'tuple'>
# 不是元組
b = ('hello')
print(type(b)) # <class
'str'>
c = (100)
print(type(c)) # <class
'int'>
# 一元組
d = ('hello', )
print(type(d)) # <class
'tuple'>
e = (100, )
print(type(e)) # <class
'tuple'>
講到這里,相信大家一定迫切的想知道元組有哪些應(yīng)用場(chǎng)景,我們給大家舉幾個(gè)例子。
當(dāng)我們把多個(gè)用逗號(hào)分隔的值賦給一個(gè)變量時(shí),多個(gè)值會(huì)打包成一個(gè)元組類型;當(dāng)我們把一個(gè)元組賦值給多個(gè)變量時(shí),元組會(huì)解包成多個(gè)值然后分別賦給對(duì)應(yīng)的變量,如下面的代碼所示。
# 打包
a = 1, 10, 100
print(type(a), a) # <class 'tuple'> (1, 10, 100)
# 解包
i, j, k = a
print(i, j, k) # 1 10 100
在解包時(shí),如果解包出來的元素個(gè)數(shù)和變量個(gè)數(shù)不對(duì)應(yīng),會(huì)引發(fā)ValueError異常,錯(cuò)誤信息為:too many values to unpack(解包的值太多)或not enough values to unpack(解包的值不足)。
a = 1, 10, 100, 1000
# i, j, k = a # ValueError: too many values to unpack (expected 3)
# i, j, k, l, m, n = a # ValueError: not enough values to unpack (expected 6, got 4)
有一種解決變量個(gè)數(shù)少于元素的個(gè)數(shù)方法,就是使用星號(hào)表達(dá)式,我們之前講函數(shù)的可變參數(shù)時(shí)使用過星號(hào)表達(dá)式。有了星號(hào)表達(dá)式,我們就可以讓一個(gè)變量接收多個(gè)值,代碼如下所示。需要注意的是,用星號(hào)表達(dá)式修飾的變量會(huì)變成一個(gè)列表,列表中有0個(gè)或多個(gè)元素。還有在解包語法中,星號(hào)表達(dá)式只能出現(xiàn)一次。
a = 1, 10, 100, 1000
i, j, *k = a
print(i, j, k) # 1 10 [100, 1000]
i, *j, k = a
print(i, j, k) # 1 [10, 100] 1000
*i, j, k = a
print(i, j, k) # [1, 10] 100 1000
*i, j = a
print(i, j) # [1, 10, 100] 1000
i, *j = a
print(i, j) # 1 [10, 100, 1000]
i, j, k, *l = a
print(i, j, k, l) # 1 10 100 [1000]
i, j, k, l, *m = a
print(i, j, k, l, m) # 1 10 100 1000 []
需要說明一點(diǎn),解包語法對(duì)所有的序列都成立,這就意味著對(duì)字符串、列表以及我們之前講到的range函數(shù)返回的范圍序列都可以使用解包語法。大家可以嘗試運(yùn)行下面的代碼,看看會(huì)出現(xiàn)怎樣的結(jié)果。
a, b, *c = range(1,
10)
print(a, b,
c)
a, b,
c = [1,
10,
100]
print(a, b,
c)
a, *b,
c = 'hello'
print(a, b,
c)
現(xiàn)在我們可以反過來思考一下函數(shù)的可變參數(shù),可變參數(shù)其實(shí)就是將多個(gè)參數(shù)打包成了一個(gè)元組,可以通過下面的代碼來證明這一點(diǎn)。
def add(*args):
print(type(args), args)
total =
0
for val in args:
total +=
val
return total
add(1,
10,
20) # <class 'tuple'> (1,
10,
20)
add(1,
2,
3,
4,
5) # <class 'tuple'> (1,
2,
3,
4,
5)
交換兩個(gè)變量的值是編程語言中的一個(gè)經(jīng)典案例,在很多編程語言中,交換兩個(gè)變量的值都需要借助一個(gè)中間變量才能做到,如果不用中間變量就需要使用比較晦澀的位運(yùn)算來實(shí)現(xiàn)。在Python中,交換兩個(gè)變量a和b的值只需要使用如下所示的代碼。
a, b = b, a
同理,如果要將三個(gè)變量a、b、c的值互換,即b賦給a,c賦給b,a賦給c,也可以如法炮制。
a, b, c = b, c, a
需要說明的是,上面并沒有用到打包和解包語法,Python的字節(jié)碼指令中有ROT_TWO和ROT_THREE這樣的指令可以實(shí)現(xiàn)這個(gè)操作,效率是非常高的。但是如果有多于三個(gè)變量的值要依次互換,這個(gè)時(shí)候沒有直接可用的字節(jié)碼指令,執(zhí)行的原理就是我們上面講解的打包和解包操作。
有的時(shí)候一個(gè)函數(shù)執(zhí)行完成后可能需要返回多個(gè)值,這個(gè)時(shí)候元組類型應(yīng)該是比較方便的選擇。例如,編寫一個(gè)找出列表中大值和最小的函數(shù)。
def find_max_and_min(items):
"""找出列表中大和最小的元素
:param items: 列表
:return: 大和最小元素構(gòu)成的二元組
"""
max_one, min_one = items[0], items[0]
for item
in items:
if item > max_one:
max_one = item
elif item < min_one:
min_one = item
return max_one, min_one
上面函數(shù)的return語句中有兩個(gè)值,這兩個(gè)值會(huì)組裝成一個(gè)二元組然后返回。所以調(diào)用find_max_and_min函數(shù)會(huì)得到這個(gè)二元組,如果愿意也可以通過解包語法將二元組中的兩個(gè)值分別賦給兩個(gè)變量。
這里還有一個(gè)非常值得探討的問題,Python中已經(jīng)有了列表類型,為什么還需要元組這樣的類型呢?這個(gè)問題對(duì)于初學(xué)者來說似乎有點(diǎn)困難,不過沒有關(guān)系,我們先拋出觀點(diǎn),大家可以一邊學(xué)習(xí)一邊慢慢體會(huì)。
元組是不可變類型,不可變類型更適合多線程環(huán)境,因?yàn)樗档土瞬l(fā)訪問變量的同步化開銷。關(guān)于這一點(diǎn),我們會(huì)在后面講解多線程的時(shí)候?yàn)榇蠹以敿?xì)論述。
元組是不可變類型,通常不可變類型在創(chuàng)建時(shí)間和占用空間上面都優(yōu)于對(duì)應(yīng)的可變類型。我們可以使用sys模塊的getsizeof函數(shù)來檢查保存相同元素的元組和列表各自占用了多少內(nèi)存空間。我們也可以使用timeit模塊的timeit函數(shù)來看看創(chuàng)建保存相同元素的元組和列表各自花費(fèi)的時(shí)間,代碼如下所示。
import sys
import timeit
a = list(range(100000))
b = tuple(range(100000))
print(sys.getsizeof(a), sys.getsizeof(b)) #
900120 800056
print(timeit.timeit('[1, 2, 3, 4, 5, 6, 7, 8, 9]'))
print(timeit.timeit('(1, 2, 3, 4, 5, 6, 7, 8, 9)'))
Python中的元組和列表是可以相互轉(zhuǎn)換的,我們可以通過下面的代碼來做到。
# 將元組轉(zhuǎn)換成列表
info = ('駱昊',
175, True,
'四川成都')
print(list(info)) # ['駱昊',
175, True,
'四川成都']
# 將列表轉(zhuǎn)換成元組
fruits = ['apple',
'banana',
'orange']
print(tuple(fruits)) # ('apple',
'banana',
'orange')
“Python中怎么定義和使用元組”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
新聞標(biāo)題:Python中怎么定義和使用元組-創(chuàng)新互聯(lián)
網(wǎng)頁路徑:http://www.rwnh.cn/article40/ccejho.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、定制網(wǎng)站、App開發(fā)、軟件開發(fā)、網(wǎng)站設(shè)計(jì)公司、標(biāo)簽優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容