目錄
元組
什么是元組(tuple)
元組練習-1
元組的基本操作
元組常用內建函數
列表和元組的區別與總結
元組練習-2
元組練習-3
元組
什么是元組(tuple)
與列表(list)一樣,元組(tuple)也是序列,唯一的區別在于元組是不能修改的(你可能注意到了,字符串也不能修改)。元組語法很簡單,只要將一些變量用逗號(,
)分隔,就能自動創建一個元組。
a = 1,2,3
print(a)print((1,2,3))
1、元組還可用圓括號(()
)括起(這也是通常采用的做法)。
2、空元組用兩個不包含任何內容的圓括號表示。
3、如何表示只包含一個值的元組呢?這有點特殊:雖然只有一個值,也必須在它后面加上逗號。
print((12),type((12)))print((12,),type((12,)))輸出:12 <class 'int'>
(12,) <class 'tuple'>
由此可見,加上逗號就變成了元組!
元組練習-1
定義一個元組描述
請從標準輸入流(控制臺)中獲取一個整型數字變量 num_1,一個字符串變量 num_2,請你定義一個元組,包含這兩個變量,并打印出來這個元組和它的類型。
num_1 = int(input())
num_2 = eval(input())tuple_1 = (num_1,num_2)
print(tuple_1)
print(type(tuple_1))
元組的基本操作
創建一個元組(tuple)
通過將所有項目(元素)放在括號內 ()
(以逗號(,
)分隔)來創建元組。括號是可選的,但是,使用括號是一個好習慣。
元組可以具有任意數量的項,并且它們可以具有不同的類型(整數(int
),浮點數(float
),列表(list
),字符串(string
)等)。
也可以在不使用括號的情況下創建元組。這稱為元組包裝。
用一個元素創建一個元組有點特殊。
只有一個元素的元組,括號內僅包含一個元素是不夠的。我們將需要一個逗號結尾來表明它實際上是一個元組。
tuple_1 = ("hi")
print(type(tuple_1))tuple_2 = (1)
print(type(tuple_2))tuple_3 = ("hi",)
print(type(tuple_3))tuple_4 = (1.2)
print(type(tuple_4))輸出:
<class 'str'>
<class 'int'>
<class 'tuple'>
<class 'float'>
可以看到,元組可以存儲多種數據類型!
訪問元組元素
我們可以通過多種方式訪問元組的元素。
1.索引
我們可以使用索引運算符 []
訪問索引從 0
開始的元組中的項目。
因此,具有 6 個元素的元組將具有從 0
到 5
的索引。嘗試訪問元組之外的元素(例如 6
、7
...)將引發 IndexError
。
索引必須是整數;因此我們不能使用 float
或其他類型。如果使用會導致 TypeError
。
2.負索引
Python 允許對其序列進行負索引。
索引 -1
表示最后一項,-2
表示倒數第二項,依此類推。
tuple_1 = ('h','e','l','l','o','1')print(tuple_1[-1])
print(tuple_1[-6])輸出:
1
h
3.切片
我們可以使用切片運算符冒號 :
訪問元組中的一系列項目。
tuple_1 = ('h','e','l','l','o','1')print(tuple_1[2:5])
print(tuple_1[0:5])輸出:
('l', 'l', 'o')
('h', 'e', 'l', 'l', 'o')
4、更換元組
與列表不同,元組是不可變的。
這意味著一旦分配了元組的元素就無法更改。但是,如果元素本身是可變的數據類型(如列表),則可以更改其嵌套項目。
我們還可以將元組分配給不同的值(重新分配)。
# 定義一個內嵌列表的元組
tuple_1 = (4, 2, [3], [9])
# 對列表進行添加操作
tuple_1[2].append(5)
print(tuple_1)
my_tuple = ("shell","bash")
# 將元組分配給不同的值
tuple_2 = my_tuple
print(tuple_2)輸出:
(4, 2, [3, 5], [9])
('shell', 'bash')
我們可以使用 +
運算符來合并兩個元組。這也稱為串聯。
我們還可以使用運算符 *
,將元組中的元素重復給定次數。
無論 +
和 *
操作會導致新的記錄。
tuple_1 = (1, 2, 3)
tuple_2 = (4, 5, 6)
# 合并兩個元組并賦值給新的變量
tuple_3 = tuple_1 + tuple_2
print(tuple_3)
# 將元組中的元素重復 3 次
tuple_4 = ("shell",) * 3
print(tuple_4)輸出:
(1, 2, 3, 4, 5, 6)
('shell', 'shell', 'shell')
5、刪除元組
我們不能更改元組中的元素。這也意味著我們無法刪除或刪除元組中的項目。
但是可以使用關鍵字 del
完全刪除一個元組。
tuple_1 = ('s','h','e','l','l')# 不能刪除條目
# TypeError: 'tuple_1'對象不支持項目刪除
# del my_tuple[3]# 可以刪除整個元組
del tuple_1# NameError: 未定義名稱“ tuple_1”
print(tuple_1) #如果使用del刪除元組,再次打印就會報錯!
元組常用內建函數
1、元組方法
元組(tuple
)不提供添加項目或刪除項目的方法。僅以下兩種方法可用。
方法 | 描述 |
---|---|
count(x) | 返回元組內相同元素的數量 x |
index(x) | 返回等于 x 的第一項的索引 |
my_tuple = ('h','e','l','l','o',)print(my_tuple.count('e'))
print(my_tuple.index('l'))輸出:
1
2
2、其他元組操作
2.1元組成員資格測試
我們可以使用關鍵字 in
來測試項目是否存在于元組中。
tuple_1= ('h','e','l','l','o',)
print('s' in tuple_1)
print('l' in tuple_1)輸出:False
True
2.2遍歷元組
使用 for
循環,我們可以遍歷元組中的每個元素。
for ls in ('shell','bash'):print("hello",ls)輸出:
hello shell
hello bash
元組相比于列表的優勢
由于元組與列表非常相似,因此它們在類似情況下也都使用。
但是,在列表上實現元組具有某些優點。下面列出了一些主要優點:
- 我們通常將元組用于異構(不同)數據類型,將列表用于同類(相似)數據類型。
- 由于元組是不可變的,因此遍歷元組要比使用list更快。因此,性能略有提升。
- 包含不可變元素的元組可以用作字典的鍵。對于列表,這是不可能的。
- 如果您擁有不變的數據,則將其實現為元組可以確保其保持寫保護。
列表和元組的區別與總結
列表(list)
- 列表是動態數組,可變(增加、修改不會使 ID 發生變化)且可以重設長度(包括增加、刪除、修改元素)
- 列表中的元素可重復,元素之間的類型可以不同,元素的值可以修改
- 使用
[]
來定義列表 - 可以索引,可以切片
- 列表常用來保存多個獨立的同質(homogeneous)對象,例如北上廣深的人口數量
- 由于列表是動態數組,支持
resize
操作,因此當一個列表沒有空位放新的元素的時候,Python 會創建一個新的列表,把老的列表里面的元素以及新添加的元素放進去,同時把舊的列表銷毀。 - 當我們試圖創建一個有
n
個元素的列表時,Python 會創建一個可以放n+k
個元素的列表,為未來添加元素預留了k
個位置,這樣可以減少分配空間和內存復制的次數(很耗費計算資源),從而節省計算資源。 - 所以說保存同樣的元素個數的時候,元組占用的空間更小。
元組(tuple)
-
元組是靜態數組,不可變且內部數據一旦創建便無法改變(此外,數字、字符串也屬于不可變類型)
-
元組里的元素、元組的大小在創建完成以后不能改變,如果賦新的值則 ID 會發生變化
-
注意,這里的不可變指的是元組中每一個元素對象的引用(指針)不可變,但是如果某個元素對象本身是可變的對象,那么你是可以對這個可變對象進行修改的。例如,元祖里面有一個元素是列表,這個列表里面的內容是可以修改的。
-
元組里元素的類型可以不同
-
使用
()
來定義元組 -
可以切片、可以索引
-
元組常用來描述一個不會改變的事物的多個異質(heterogeneous,對比上面的“同質”,意思是不同位置的元素表達不同的意思)屬性,例如一個城市的經緯度。這也是為什么元組不可變而列表可變的原因,因為列表儲存同質的對象,例如北上廣深的人口數,我們可以再加上成都蘇州的人口數、或者刪掉深圳的人口數也沒有問題,但是元組里面一個城市的經緯度刪掉一個或者修改一個是沒有意義的。
-
關于可變與不可變的另一個例子:你外出散步的時候可以用元組
(x,y)
描述當前的經緯度,如果你想記錄自己的軌跡,那么可以用列表記錄每一秒的[(x,y)]
。 -
由于字典的
key
必須是不可變類型,因此列表不能作為字典的key
,但是元組可以 -
如果實在想修改已經定義好的元組:
①可以通過切片來實現刪除元素的功能;
②可以通過
+
運算來實現拼接的功能,類似于列表的resize
操作 -
創建元組的速度比創建列表的速度快 3-5 倍。一般不再用到的變量所占用的資源會被釋放還給操作系統,但是長度為 1-20 的元組即使不再使用了,也不會把它們占用的資源立刻還給操作系統,而是留作未來使用,這樣在以后創建同樣大小的元組的時候,就不用重新申請內存了。
元組練習-2
分割元組描述
輸入一個長度為偶數的元組 my_tuple,輸出兩個元組,一個是元組的前一半,一個是元組的后一半。
my_tuple = eval(input())
l = int(len(my_tuple))/2
print(my_tuple[:l])
print(my_tuple[l:])輸出:
(1, 2)
(3, 4)
元組練習-3
元素在元組內的出現次數輸入一個由整數組成的元組 my_tuple 和一個整數 x,輸出元組內 x 的個數。
my_tuple = eval(input())
x = int(input())
print(my_tuple.count(x))