中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

Python中怎么定義和使用元組-創(chuàng)新互聯(lián)

本篇內(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)景

講到這里,相信大家一定迫切的想知道元組有哪些應(yīng)用場(chǎng)景,我們給大家舉幾個(gè)例子。

例子1:打包和解包操作。

當(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)

例子2:交換兩個(gè)變量的值。

交換兩個(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í)行的原理就是我們上面講解的打包和解包操作。

例子3:讓函數(shù)返回多個(gè)值。

有的時(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)

營銷型網(wǎng)站建設(shè)
江津市| 仪陇县| 潼关县| 靖安县| 敦化市| 赣州市| 六盘水市| 从江县| 静海县| 萝北县| 梅河口市| 凤凰县| 马龙县| 玉山县| 塘沽区| 乐亭县| 潜山县| 樟树市| 钟祥市| 宜宾县| 五河县| 马龙县| 天峻县| 伊川县| 玛曲县| 温宿县| 潮州市| 巴东县| 玉龙| 双鸭山市| 措勤县| 资源县| 阳西县| 嘉禾县| 阿合奇县| 陵水| 塔城市| 攀枝花市| 大姚县| 鹤壁市| 吐鲁番市|