目錄
- 一、一維元組的介紹、創建與修改
- 二、組合的基本操作
- 1. 遍歷
- 2. 取長度
- 3. 取最值
- 4. 打包
- 5. 批處理
- 5.1 map()函數
- 5.2 lambda 表達式
- 5.3 lambda 表達式 + map()函數
一、一維元組的介紹、創建與修改
??元組(tuple
),一種不可變、有序、可重復的數據結構,屬于不可變序列,由小括號()
內、用逗號分隔的一組元素組成。
??與同為序列的列表一樣,元組的元素可以是任意數據類型的對象的引用,并通過索引來訪問元素;但區別于可變序列,我們無法直接對元組進行增刪改操作。
??準確的說,應該是元組對對象的引用,也就是元素id
,不能改變。如果元素指向不可變對象,那么改變它通常指的是改變id
;但如果元素指向可變對象,則可以修改值而內存地址不變。
# 修改元組
t = (1, [2])
t[1][0] = 1print(t)
(1, [1])
??在實際應用中,不可變序列有一定優勢。為了防止多端同時操作發生混亂,通常會在某一端操作時,對數據結構上鎖。在多任務環境下,同時操作多個可變對象需要加鎖,而不可變對象則不用。這是因為,它們只能被瀏覽或取出數據,而不能被修改,所以在程序中盡量使用不可變序列。
??與列表同理,元組同樣有賦值創建和引用創建,對應類似的函數tuple()
。我們可以通過tuple()
和list()
實現元組的間接修改,即:使用list()
函數把元組轉化成列表,然后在列表上進行修改,最后使用tuple()
轉化回元組。
# 空元組
t = ()
t = tuple()# 賦值創建
t = (1,) # 單元素元組的創建格式
t = (1, 2, 3)
t = 1, 2, 3 # 省略寫法# 引用創建
t = tuple([1, 2, 3])
print(t)# 間接修改
lst = list(t)
lst[0] = 0
t = tuple(lst)
print(t)
(1, 2, 3)
(0, 2, 3)
二、組合的基本操作
??元組屬于序列,適用于序列的所有基本操作,這部分內容在Python基礎學習筆記(六)——列表中,這里不再重復。
??以下操作適用于所有組合,包括列表、元組、字符串、集合、字典,下面主要以元組為例。
1. 遍歷
t = 1, 2, 3
for i in t:print(i)
1
2
3
2. 取長度
??len()
函數:返回組合內的元素個數。
t = 1, 2, 3
print(len(t))
3
3. 取最值
??max()
函數:返回可迭代對象內元素的最大值。
??min()
函數:返回可迭代對象內元素的最小值。
t = 1, 2, 3
print(max(t), min(t))
3 1
4. 打包
??zip()
函數:將一個或多個可迭代對象的對應元素依次打包成元組,并返回由這些元組組成的zip
對象迭代器。若輸入的可迭代對象的長度不同,打包的元組數量取最短可迭代對象的長度。
d = {'a': 1}
t = 1, 2
s = {'a', 'b', 'c'} # 打包單個可迭代對象
for i in zip(d): print(i) # 打包多個不同長度的可迭代對象
print(list(zip(t, s)))
('a',)
[(1, 'c'), (2, 'a')]
5. 批處理
5.1 map()函數
??map(function, iterable)
函數:對可迭代對象中的每一個元素調用指定函數,返回一個map
對象迭代器。
t = 1, 2for i in map(float, t):print(i)
1.0
2.0
5.2 lambda 表達式
??lambda
表達式是一種匿名函數,可在非正式定義函數的情況下使用。它由關鍵字lambda
開頭,后接參數列表,然后用冒號分隔,最后是一個表達式。
??它們通常作為臨時函數,用于執行簡單操作或為其他函數傳遞參數。
add = lambda x, y: x + y
print(add(2, 3))
5
5.3 lambda 表達式 + map()函數
??該模式允許我們更靈活地進行多個可迭代對象之間的自定義運算。
t1 = 1, 2, 3
t2 = 11, 22, 33
t3 = 10, 20, 30
# 參數列表與iterable依次對應
print(list(map(lambda x, y, z: x*y-z, t1, t2, t3)))
[1, 24, 69]