首頁 後端開發 Python教學 Python 元組(Tuple)操作詳解

Python 元組(Tuple)操作詳解

Jan 13, 2017 pm 04:22 PM

一、創建元組

tup1 = ('physics', 'chemistry', 1997, 2000);
tup2 = (1, 2, 3, 4, 5 );
tup3 = "a", "b", "c", "d";
登入後複製

創建空元組

tup1 = ();
登入後複製

元組中只包含一個元素時,需要在元素後面添加逗號來消除歧義

tup1 = (50,);
登入後複製

元組與字串類似,下標索引從0開始,可以進行截取,組合等。
二、訪問元組
元組可以使用下標索引來存取元組中的值,如下實例:

#!/usr/bin/python
tup1 = ('physics', 'chemistry', 1997, 2000);
tup2 = (1, 2, 3, 4, 5, 6, 7 );
print "tup1[0]: ", tup1[0]
print "tup2[1:5]: ", tup2[1:5]
#以上实例输出结果:
#tup1[0]:  physics
#tup2[1:5]:  [2, 3, 4, 5]
登入後複製

三、修改元組
元組中的元素值是不允許修改的,但我們可以對元組進行連接組合,如下實例:

#!/usr/bin/python
tup1 = (12, 34.56);
tup2 = ('abc', 'xyz');
# 以下修改元组元素操作是非法的。
# tup1[0] = 100;
# 创建一个新的元组
tup3 = tup1 + tup2;
print tup3;
#以上实例输出结果:
#(12, 34.56, 'abc', 'xyz')
登入後複製

四、刪除元組
元組中的元素值是不允許刪除的,但我們可以使用del語句來刪除整個元組,如下實例:

#!/usr/bin/python
tup = ('physics', 'chemistry', 1997, 2000);
print tup;
del tup;
print "After deleting tup : "
print tup;
登入後複製

#以上實例元組被刪除後,輸出變數會有異常訊息,輸出如下所示:
#('physics', 'chemistry', 1997, 2000)
#After deleting tup :
#Traceback (most recent call last):
#  File "test.py", line 9, in
#    print tup;
#NameError: name 'tup' is not defined[/code]
五、元組運算子
與字串一樣,元組運算子組之間可以使用+ 號和* 號運算。這意味著他們可以組合和複製,運算後會產生一個新的元組。


六、元組索引,截取
因為元組也是一個序列,所以我們可以存取元組中的指定位置的元素,也可以截取索引中的一段元素,如下所示:
元組:

L = ('spam', 'Spam', 'SPAM!')
登入後複製

七、無關閉分隔符
任意無符號的對象,以逗號隔開,預設為元組,如下實例:

#!/usr/bin/python
print 'abc', -4.24e93, 18+6.6j, 'xyz';
x, y = 1, 2;
print "Value of x , y : ", x,y;
登入後複製

以上實例允許結果:

abc -4.24e+93 (18+6.6j) xyz
Value of x , y : 1 2
登入後複製

八、元組內置函數
Python元組包含了以下內建函數
1、cmp(tuple1, tuple2):比較兩個元組元素。
2、len(tuple):計算元組元素個數。
3、max(tuple):傳回元組中元素最大值。
4、min(tuple):傳回元組中元素最小值。
5、tuple(seq):將清單轉換為元組。


九、另一種解讀

tuple和list非常類似,但是tuple一旦初始化就不能修改,比如同樣是列出同學的名字:

>>> classmates = ('Michael', 'Bob', 'Tracy')
登入後複製

現在,classmates這個tuple不能變了,它也沒有append(),insert()這樣的方法。其他取得元素的方法和list是一樣的,你可以正常地使用classmates[0],classmates[-1],但不能賦值成另外的元素。
不可變的tuple有什麼意義?因為tuple不可變,所以程式碼更安全。如果可能,能用tuple代替list就盡量用tuple。
tuple的陷阱:當你定義一個tuple時,在定義的時候,tuple的元素就必須被確定下來,比如:

>>> t = (1, 2)
>>> t
(1, 2)
登入後複製

如果要定義一個空的tuple,可以寫成():

>>> t = ()
>>> t
()
登入後複製

但是,要定義一個只有1個元素的tuple,如果你這麼定義:

>>> t = (1)
>>> t
1
登入後複製

定義的不是tuple,是1這個數字!這是因為括號()既可以表示tuple,又可以表示數學公式中的小括號,這就產生了歧義,因此,Python規定,這種情況下,按小括號進行計算,計算結果自然是1。
所以,只有1個元素的tuple定義時必須加一個逗號,,來消除歧義:

>>> t = (1,)
>>> t
(1,)
登入後複製

Python在顯示只有1個元素的tuple時,也會加一個逗號,,以免你誤解成數學計算意義上的括號。

在來看一個「可變的」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個元素​​:

Python 元组(Tuple)操作详解

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

Python 元组(Tuple)操作详解

表面上看,tuple的元素確實變了,但其實變的不是tuple的元素,而是list的元素。 tuple一開始指向的list並沒有改成別的list,所以,tuple所謂的「不變」是說,tuple的每個元素,指向永遠不變。即指向'a',就不能改成指向'b',指向一個list,就不能改成指向其他對象,但指向的這個list本身是可變的!
理解了「指向不變」後,要創建一個內容也不變的tuple怎麼做?那就必須保證tuple的每一個元素本身也不能改變。

更多Python 元組(Tuple)操作詳解相關文章請關注PHP中文網!


本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何解決Linux終端中查看Python版本時遇到的權限問題? 如何解決Linux終端中查看Python版本時遇到的權限問題? Apr 01, 2025 pm 05:09 PM

Linux終端中查看Python版本時遇到權限問題的解決方法當你在Linux終端中嘗試查看Python的版本時,輸入python...

如何在使用 Fiddler Everywhere 進行中間人讀取時避免被瀏覽器檢測到? 如何在使用 Fiddler Everywhere 進行中間人讀取時避免被瀏覽器檢測到? Apr 02, 2025 am 07:15 AM

使用FiddlerEverywhere進行中間人讀取時如何避免被檢測到當你使用FiddlerEverywhere...

在Python中如何高效地將一個DataFrame的整列複製到另一個結構不同的DataFrame中? 在Python中如何高效地將一個DataFrame的整列複製到另一個結構不同的DataFrame中? Apr 01, 2025 pm 11:15 PM

在使用Python的pandas庫時,如何在兩個結構不同的DataFrame之間進行整列複製是一個常見的問題。假設我們有兩個Dat...

Uvicorn是如何在沒有serve_forever()的情況下持續監聽HTTP請求的? Uvicorn是如何在沒有serve_forever()的情況下持續監聽HTTP請求的? Apr 01, 2025 pm 10:51 PM

Uvicorn是如何持續監聽HTTP請求的? Uvicorn是一個基於ASGI的輕量級Web服務器,其核心功能之一便是監聽HTTP請求並進�...

如何在10小時內通過項目和問題驅動的方式教計算機小白編程基礎? 如何在10小時內通過項目和問題驅動的方式教計算機小白編程基礎? Apr 02, 2025 am 07:18 AM

如何在10小時內教計算機小白編程基礎?如果你只有10個小時來教計算機小白一些編程知識,你會選擇教些什麼�...

在Linux終端中使用python --version命令時如何解決權限問題? 在Linux終端中使用python --version命令時如何解決權限問題? Apr 02, 2025 am 06:36 AM

Linux終端中使用python...

如何繞過Investing.com的反爬蟲機制獲取新聞數據? 如何繞過Investing.com的反爬蟲機制獲取新聞數據? Apr 02, 2025 am 07:03 AM

攻克Investing.com的反爬蟲策略許多人嘗試爬取Investing.com(https://cn.investing.com/news/latest-news)的新聞數據時,常常�...

See all articles