注意!在Python中不要所有操作都用列表
學(xué)習(xí)新事物時(shí),我們常常對(duì)所有可能發(fā)生的情況都不了解。通過(guò)反復(fù)試錯(cuò),我們會(huì)總結(jié)出一個(gè)方法或一個(gè)規(guī)律來(lái)應(yīng)對(duì)新事物可能發(fā)生的問(wèn)題,一旦某個(gè)方法十分有效,我們就會(huì)一直使用這個(gè)方法……
在Python中,這個(gè)方法就是使用列表。
列表十分方便、它的結(jié)構(gòu)清晰靈活。而且學(xué)習(xí)列表推導(dǎo)有著一種純粹的樂(lè)趣,就像是中了數(shù)據(jù)類型中的頭獎(jiǎng)。
使用列表的感覺(jué)就像是在《火影死神大亂斗》游戲中一直使用自己最愛(ài)的特殊招式。
和許多東西一樣,Python也有一些藏得并不隱蔽的“寶石”,這些“寶石”能夠?yàn)镻ython的愛(ài)好者們提升技能等級(jí),其中有兩個(gè)寶石,它們分別是:元組和集合。
現(xiàn)在,讓我們來(lái)看一看這些特殊的數(shù)據(jù)類型,并探討為什么應(yīng)該使用這些數(shù)據(jù)類型而不用列表。
元組
元組是不可變的有序項(xiàng)序列。“不可變”——是它的秘密武器。一旦定義了元組,它就不能被更改。
使用元組的規(guī)則與列表幾乎相同,不同之處只是使用圓括號(hào)而不是方括號(hào)。另外,還可以獲取列表并將其轉(zhuǎn)換為元組。
- # how to define a list
- num_list = [1,2,3,4]# how to define a tuple
- num_tuple = (1,2,3,4)# use tuple() to convert
- num_convert = tuple(num_list)
不可變有什么特別之處?乍一看似乎很不方便;但是,每次恰當(dāng)?shù)厥褂迷M而不是用列表的時(shí)候,其實(shí)是在做兩件事。
- 編寫(xiě)更多有意義的安全代碼。當(dāng)變量被定義為元組時(shí),就是在告訴自己和代碼的任何其他查看器:“這不會(huì)改變”。為了防止遺漏備忘錄,任何修改變量的嘗試都將出現(xiàn)錯(cuò)誤。
- 提高性能。迭代元組比迭代列表更快。元組比列表更節(jié)省內(nèi)存。由于元組中的項(xiàng)目數(shù)不變,因此其內(nèi)存占用更為簡(jiǎn)潔。
如果列表的大小未經(jīng)修改,或者其目的只是用于迭代,那么可以嘗試用元組替換。
集合
集合是一個(gè)無(wú)序的、唯一的數(shù)據(jù)項(xiàng)組合。一個(gè)集合不能有重復(fù)值,這就是它與列表的區(qū)別。
若要定義集合,就要用大括號(hào)括起逗號(hào)分隔的項(xiàng)列表。不要和創(chuàng)建具有鍵值對(duì)的詞典相混淆。與元組一樣,可以通過(guò)轉(zhuǎn)換另一種數(shù)據(jù)類型來(lái)創(chuàng)建集合。
- # how to define a list
- num_list = [1,2,3,4]# how to define a set
- num_set = {1, 2, 3, 4}# use set() to convert
- num_convert = set(num_list)
那么如果兩項(xiàng)完全相同會(huì)如何呢?
- nums = {1,2,3,4,4}
- print(nums) # 1,2,3,4
如你所見(jiàn),第二個(gè)“4”被移除了。如果原始值是一個(gè)重復(fù)項(xiàng)列表,也會(huì)發(fā)生同樣的情況。
那么,為什么要使用集合而不是列表呢?首先,轉(zhuǎn)換為集合是刪除重復(fù)值的最簡(jiǎn)單方法。此外,集合和任何數(shù)據(jù)類型一樣都有自己的方法集。
當(dāng)比較多個(gè)集合時(shí),集合是非常有用的,想想維恩圖便可知。還有union()、intersection()和difference()函數(shù)將分別告訴你兩個(gè)集合之間的組合值、共享值和不同值。
來(lái)源:Pexels
列表用起來(lái)很舒服可靠,但可能還有更好的工具,我們不能停止探索的腳步。
使用元組可以更快地處理并保護(hù)開(kāi)發(fā)者聲明的數(shù)據(jù)結(jié)構(gòu)。使用集合可以確保唯一值并利用比較方法。
Python就是要為每個(gè)問(wèn)題都找到合適的工具。