一、元組定義
元組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)使用,而列表不行
元組作為很多內建函式和方法的返回值存在