Python元組tuple

leagueandlegends發表於2024-04-08

一、元組定義

元組tuple像是一個列表list,它內部的值不可被修改。元組是一個有序的、不可變資料結構/型別

列表->元組 加鎖過程

元組->列表 解鎖過程

列表和元組對比 list tuple
宣告 [] ()
索引 YES YES
切片 YES YES
追加元素 YES NO
修改元素 YES NO
刪除元素 YES NO
基於值反查索引 YES NO
包含關係查詢 YES YES

元組tuple對於大型資料處理速度優於列表list,如果你有一個常量集需要經常遍歷(for),那麼元組的效率優於列表

元組tuple由於其無法寫入的特點,放在元組內部的資料自然就有一個"防寫",類似我們的sd卡、cf卡或者部分隨身碟

特別注意-1:當函式(方法)返回的資料大於一個時,一般以元組形式返回。

特別注意-2:由於元組的“防寫”模式,函式可以按照元組內部元素的位置順序接收元組的資料

二、元組tuple支援什麼資料型別

name='正正'                          #字串Str
age=18                                #整數Int
height=1.74                           #浮點Float
is_yes=True                           #布林bool
pets=['狗','貓','魚']                  #列表List
work_ctities=('北京','上海')           #元組Tuple
teacher={'姓名':'正正'}               #字典Dict

三、元組tuple的基本特性 

增加:(1)支援空元組建立

刪除:(1)僅支援元組整體刪除

查詢:(1)支援元組資料查詢(基於下標、索引、index)

(2)支援切片查詢

(3)支援第一級元素長度統計(len)

四、元組tuple建立

(1)空值建立

方法一:空值建立

tuple_data1=tuple()     #空值建立 

方法二:空值建立

tuple_data2=()          #空值建立

特別方法:單個值建立 

tuple_data3=("北京",)   #單個值建立,必須要有逗號區分該型別為元組

特別方法:多值無括弧建立

tuple_data4="北京","上海","杭州" #多值無括弧建立

tuple_data_all=(
    [1,2,3],
    (1,2,3),
    {'name':'mike','age':28}, #字典2
    3.14159,  #浮點 3
    100,
    '萬門大學',
    True,
    False
)
print(type(tuple_data_all))
print("元組長度->",len(tuple_data_all))

輸出:

<class 'tuple'>

元組長度-> 8

五、 訪問元組

tuple_1=(1,'a','BMW','XFL',3)
tuple_2=(2,'b','WMB','LFX',4)
print(tuple_1)     #輸出完整元組1
print(tuple_2)     #輸出完整元組2
print(tuple_1[1])  #輸出tuple_1的第二個元素
print(tuple_1[2:]) #輸出tuple_1的第三個之後的元素
print(tuple_1[:3]) #輸出tuple_1的第四個之後的元素
print(tuple_1*2)   #輸出兩遍tuple_1
print(tuple_1+tuple_2)   #輸出tuple_1和tuple_2的混合元素
輸出方法:
(1, 'a', 'BMW', 'XFL', 3)
(2, 'b', 'WMB', 'LFX', 4)
a
('BMW', 'XFL', 3)
(1, 'a', 'BMW')
(1, 'a', 'BMW', 'XFL', 3, 1, 'a', 'BMW', 'XFL', 3)
(1, 'a', 'BMW', 'XFL', 3, 2, 'b', 'WMB', 'LFX', 4)
tuple_3=(['mike',28],['Jason',36],(1,2,3),{'名字':'正正','愛好':'程式設計'})
print(tuple_3)
print(tuple_3[0])

特別注意:

1、元組內的每個元素(資料),遵守該資料型別的原有規則。比如字串型別是要加引號的‘’

2、可以有多層巢狀,每一層巢狀為一個獨立體存在

3、元組的"防寫"只保護一級資料,如['mike',28]是元組的一個元素,這個元素內的元素可以按照類表的方式進行增刪改查操作。如果元組內還是元組,那麼即為元組的規則,無法"寫入"操作

tuple_3=(['mike',28],['Jason',36],(1,2,3),{'名字':'正正','愛好':'程式設計'})
print(tuple_3[0])
print(tuple_3[0:1])
print(tuple_3[2:])
print(tuple_3[:4])

查詢資料:

基於索引位置取資料

->tuple_3[0] 取一個為當前值的型別->['mike',28]

基於索引範圍取資料

tuple_3[0:1]->(['mike', 28],) 取多個值還是一個元組

六、元組的操作

6.1 刪除元組

# 刪除元組
tuple_1=(['mike',28],['Jason',36],(1,2,3),{'名字':'正正','愛好':'程式設計'})
del tuple_1

6.2 元組的拼接 

# 元組的拼接
tuple_2=(1,2,3)
tuple_3=(4,5,6)
new_tuple=tuple_2+tuple_3 #元組的拼接   
print(new_tuple)          #輸出為(1,2,3,4,5,6)

6.3 元組和列表轉換

# 元組和列表轉換
list_data1=[1,2,3]
new_tuple1=tuple(list_data1)
list_data2=[4,5,6]
new_tuple2=tuple(list_data2)
print(list_data1)        #輸出為->[1, 2, 3]
print(list_data2)        #輸出為->[4, 5, 6]
print(new_tuple1)        #輸出為->(1, 2, 3)
print(new_tuple2)        #輸出為->(4, 5, 6)
print(id(list_data1))    #輸出為->139625538807680
print(id(new_tuple1))    #輸出為->139625559198976
print(id(list_data2))    #輸出為->139625538807424
print(id(new_tuple2))    #輸出為->139625538984128

6.4 元組透過變數直接取值

# 元組透過變數直接取值
personal_info=('正正',35,'北京')
name,age,city=personal_info        #輸出為->name->正正,age->35,city->北京

6.5 元組數量統計

# 元素數量統計 
message=(1,2,4,1,6,1) 
message.count(1) #輸出->3

6.6 元組自身複製

# 自身複製 
numbers=(1,2) 
new_numbers=numbers*3
# 輸出->(1,2,1,2,1,2)

6.7 元組長度輸出

# 元組的長度 
num_set1=(1,2,3,4) print(len(num_set1)) #輸出->4

6.8 元組的包含關係判斷 

# 包含關係判斷
message=('我','愛','你')
print('愛' in message)

6.9 切片延伸 

# 切片延伸
num=(0,1,2,3,4,5,6,7,8,9)
print(num[0:10:2])   #[起:止:步長] 輸出->(0,2,4,6,8)
# 特別注意-類似我們for迴圈裡的range()函式
print(num[::2])      #輸出->(0,2,4,6,8)
# 特別注意-起止不設定預設從頭到尾的範圍

6.10 元組的巢狀 

matrix_list_1=(
    ('拍黃瓜','夫妻肺片','田園沙拉'),
    ('宮保雞丁','魚香肉絲','番茄燒雞蛋'),
    ('冰淇淋','提拉米蘇','水果'),
    ('啤酒','白酒','紅酒')
)
for matrix in matrix_list_1:
    for caiming in matrix:
        print(caiming,end=',') 

元組巢狀,元組中的資料不可以修改

6.11 元組中列表穿透

元組資料不可以更改但是,元組中的列表資料可以更改

# 元組和列表轉換
tuple1_1=(
    [1,2,3],  #A元素0,第一級資料, 注意列表內部為第二級資料(可穿透),可以進行增刪改查,遵循list規則
    28,       #B元素1,第一級資料,整數本身就不可以修改,同時整數也不是結構資料型別(不可穿透)
    (4,5,6)   #C元素2,第一級資料,元組還是沿用元組的規則,只可查不可進行其他操作
)
tuple1_1[0][1]=4
print(tuple1_1)
tuple1_1[2][0]=7

 輸出結果:

如果要真正意義上的任何值不修改,那麼就要保證內部資料在構建的時候儘可能全部是元組

元組更多的是查詢和提取資料,如果需要大面積修改資料,儘量使用列表

6.12 元組中的內建函式

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

元組可以在對映(和集合的成員)中作為鍵(key)使用,而列表不行

元組作為很多內建函式和方法的返回值存在

相關文章