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