PYTHON用LSTM長短期記憶神經網絡的參數優化


六、Python 元組,不可變的列表
今天新學習的概念叫做元組,其實學元組還是離不開列表,第一個知識點是元組的英文 tuple 要牢牢記住,第一個知識點是元組與列表的區別,列表的元素可以修改,元組的元素不可以修改,所以元素又可以稱為不可變的列表,好了元組學習完畢了。

6.1 元組的定義
列表用中括號 [] 進行定義,元組用小括號 () 進行定義,元組的語法格式如下:

# my_tuple 是元組變量名,可以任意命名
my_tuple = (元素1,元素2,元素3...)
1.
2.
元組中的每一個數據也稱為元素,元素也可以是數字、字符串或者列表等內容,輸出使用 print 函數即可。

特別注意如果元組內的元素只有一個,需要在定義的時候在元素的右側增加一個英文逗號 ,,例如:

# 只有一個元素
my_tuple = (元素1,)
1.
2.
下面就在 PyCharm 中進行一下實際的編碼吧。

# 聲明一個元組對象
my_tuple = (1, 2, 3)
print(my_tuple)
print(type(my_tuple))


# 聲明一個元組對象
my_tuple1 = ("www", "aaa", "ggg")
print(my_tuple1)
print(type(my_tuple1))

# 聲明只有一個元素的元組對象
my_tuple2 = ("www", )
print(my_tuple2)
print(type(my_tuple2))
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
6.2 讀取元組中的元素
有列表在前,該部分學期起來就比較簡單了,在元組中獲取元素也是通過中括號 [] 加上索引的方式,與列表保持一致。

列表也可以通過循環去輸出,可以自行通過 for 循環進行嘗試。

列表中的元素可以通過索引去修改,但是元組不可以,以下代碼會出現錯誤。

# 聲明一個元組對象
my_tuple = ("www", "aaa", "ggg")
my_tuple[1] = "good"
print(my_tuple)
1.
2.
3.
4.
該錯誤提示如下:

TypeError: 'tuple' object does not support item assignment
1.
原因為本篇博客開始提及的元組不允許修改元素,上述錯誤翻譯之后表示 tuple 對象不支持賦值。

6.3 元組的其他知識補充
由於元組與列表太相似了,接下來的一些知識點只做簡單羅列。

切片適用於元組
列表方法中不涉及修改列表元素的方法都可用於元組,例如 len,count …,如果列表方法會對元素進行修改,那不可用於元組,例如 append, insert… 如果想詳細查閱,回憶 dir 方法。
部分列表可用的內置函數同樣適用於元組,例如 max、min…
6.4 元組與列表轉換
在開發代碼的過程中,有時需要對列表與元組進行相互轉換,該轉換類似之前學習過的強制轉換的過程,核心的內置函數為 list 與 tuple。

將元組修改為列表。

my_tuple = ("www", "aaa", "ggg")
my_list = list(my_tuple)
print(my_list)
1.
2.
3.
將列表修改為元組。

my_list = ["www", "aaa", "ggg"]
my_tuple = tuple(my_list)
print(my_tuple)
1.
2.
3.
6.5 內置函數 zip
函數 zip 可以將一個可迭代對象,如列表打包成元組,打包之后返回的是一個 zip 對象,說起來有點繞,而且應用的場景不是很明確,可以先看代碼學習一下。

en_names = ["apple", "orange", "pear"]
cn_names = ["蘋果", "橘子", "梨"]

zipData = zip(en_names, cn_names)

print(zipData) # 打印 zipData
print(type(zipData)) # 打印 zipData 數據類型
print(list(zipData)) # 輸出 zipData 中的數據內容
1.
2.
3.
4.
5.
6.
7.
8.
輸出結果:

<zip object at 0x0000024C1E4FF648>
<class 'zip'>
[('apple', '蘋果'), ('orange', '橘子'), ('pear', '梨')]
1.
2.
3.
通過代碼你可以看到,zip 把兩個列表的數據合並了,每個列表中對應索引位置的元素合並在了一個元組里面。上述代碼中就出現了 apple 與 蘋果 對應,orange 與 橘子 對應,pear 與 梨 對應。

如果放在 zip 函數的列表參數長度不相同,那 zip 會選擇元素最少的那個列表作為依據,形成對應關系。

en_names = ["apple", "orange"]
cn_names = ["蘋果", "橘子", "梨"]

zipData = zip(en_names, cn_names)

print(zipData) # 打印 zipData
print(type(zipData)) # 打印 zipData 數據類型
print(list(zipData)) # 輸出 zipData 中的數據內容
1.
2.
3.
4.
5.
6.
7.
8.
該代碼第一個列表有 2 個元素,第二個列表有 3 個元素,最終輸出的結果為:

<zip object at 0x0000026DE2F7F608>
<class 'zip'>
[('apple', '蘋果'), ('orange', '橘子')]
1.
2.
3.
如果在 zip 中的參數前面增加 * 符號,相當於解壓,返回二維矩陣式。

代碼如下:

en_names = ["apple", "orange"]
cn_names = ["蘋果", "橘子", "梨"]

zipData = zip(en_names, cn_names)

print(zipData) # 打印 zipData

unzipData = zip(*zipData)
print(unzipData) # 打印 unzipData

print(list(unzipData)) # 打印 unzipData 內容

6.6 元組的功能與應用場景
元組既然與列表這么相似,那為何 Python 還要專門設計一個元組數據類型來呢?

相比於列表,元組有如下優點。

因為其不可修改,可以保護數據;
元組在底層數據結構上比列表簡單,占用的資源少,程序執行速度快;(說了也不用記住的知識)
元組很多時候回用作函數的返回值。(后續知識)
6.7 這篇博客的總結
元組與列表就像是兩個相似的親兄弟,只在外觀上有一點點區別,核心的區別是一個可以被修改(列表),一個不可以被修改(元組),其它的差異都是基於此衍生出來的,所以掌握這個內容之后,你能對比着學會這兩個知識點。

最后一碗毒雞湯

只要堅持下去,總會有失敗的一天。 O(∩_∩)O 哈哈~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM