在這篇文章中,我們將演示一下Python中元組(Tuple)、集合(Sets)和字典(Dict)的基本使用。為了演示方便,我們假定一個程式的使用場景。假定我們是某銀行總行的信貸業務部門,現在是年底,我們要給各分行制定並下發下一年度的貸款發放指標。最後我們要展示一下指標預計什麼時候會下到分行,以及現在是否已經下發給分行。說白了就是告訴某某分行,明年你們要放多少貸款,並且記錄好打算什麼時候告訴分行,以及是否已經告訴分行了。
好了,基於以上場景,我們先來演示一個元組的使用。
在這個例項中,我們定義了三個元組,分別是ind_chengdu,ind_dalian和ind_harbin,它們分別代表成都,大連和哈爾濱的指標情況。由於我們使用的是元組,所以我們做了一個規定,元組的第1個專案代表分行名稱,第2個專案代表指標的值,第3個專案代表預計下發指標的時間,第4個專案代表是否已經下發給了分行。
元組的定義是由圓括號包圍起來,每個專案由逗號分隔。其中圓括號在語法層面是可有可無的,但是如果我們的元組是在一個比較複雜的表示式中,那麼就必須要加上圓括號。
元組(Tuple)和列表(List)看起來很類似,但是在使用的場景和使用的目的上是不同的。元組是不可變的,其中的元素型別大多比較複雜,而列表是可變的,它所包含的元素型別基本是相同的。用專業一些的話說,元組(Tuple)中包含的元素通常是異構的,而列表(List)中的元素大多是同質的。在上面的例子中,我們可以看到每個元組中都包含了字串(分行名稱),數值(指標值)、日期(預計下發時間)和布林型別(是否下發分行)。一個元組包含了多種資料型別,而如果是一個列表,則通常只有一種型別,比如我們可以定義一個分行名稱的列表,裡面全是字串型別,也就是各個分行的名稱。這就是元組和列表在使用場景上的區別。
程式的執行效果如下:
上面我們演示了元組的基本使用場景和用法。下面我們再看一下元組的一些基本語法。
對於一個元組,我們可以用逗號隔開,例如tuple1,整個元組可以用圓括號包圍起來,也可以不用圓括包圍起來,例如tuple1和tuple2。元組是可以巢狀的,例如tuple3就又嵌套了2個元組。tuple4嵌套了一個元組(Tuple),一個列表(List)
這裡我們要特別說明一下最後兩個元組的定義,即tuple5和tuple6,如果我們定義一個空元組,那麼我們就一定要使用圓括號,就像tuple5,如果我們要定義只有一個元素的元組,那麼我們就要在第1個元素的後面加上一個"逗號",大家仔細看一下tuple6的定義。這個語法真的很怪,大家一定要注意。透過執行程式我們可以看到len(tuple5)為0,而len(tuple6)為1。
接下來我們看一下集合(Sets)的使用,透過下面的例項,我們可以看到集合的定義,去重,做差等操作。
集合的生成有兩種方法,一種是用set函式,比如我們的single_company_list變數。第二種方法是用花括號,比如再往下的my_single_company_list變數。
如果我們給set函式傳入一個列表(list),則我們在建立一個集合(Set)的同時,還會對傳入的列表進行去重。
本程式用一個for迴圈演示了對集合的遍歷,透過遍歷,我們也可以看到集合中的元素已經是經過去重之後的效果了。
關於集合,我們還可以進行一些數學操作。比如"-","|","&","^"。
下面我們看一下程式的執行結果,結合效果我們解釋一下這些操作的含義。
為了方便大家閱讀,我把兩個做比較的變更放在了執行結果裡,並且用紅色字型標出(我們只展示變數內容,用於講解,畢竟company_list是一個列表,之後用set構造成了一個集合)。為了簡化描述,我用a代表第一集合,b代表第二個集合。
"-"的含義是做差,即公司名稱在a中,但是不在b中。所以我們看到"哈爾濱4公司"和"哈爾濱1公司"只在a中存在,不在b中出現。
"|"的含義是公司名稱即在a中,也在b中,所以計算的結果是同時包含了a和b的元素,相當於一個邏輯或
"&"的含義是要求公司名稱同時在a和b中出現。計算的結果就是隻有"哈爾濱2公司"和"哈爾濱3公司"同時在a和b中都存在。相當於一個邏輯與
"^"的含義是沒有同時出現在a和b中的公司名稱。我們看一下a中的"哈爾濱1公司"和"哈爾濱4公司",只在a中出現,b中沒有。而b中的"哈爾濱5公司"只在b中存在,a中又沒有。所以計算的結果就是"1公司","4公司"和"5公司"。
最後我們透過一個字典型別(Dict),改進一下文章開頭的程式,以便介紹一下字典的使用。
在這個例項中,我們對之前的程式進行了改造,我們使用字典(Dict)來代替元組(Tuple)。變數ind_chengdu便是一個字典。字典的定義要求以花括號包圍,元素以逗號間隔,每個元素由冒號分開,形成一個key:value的小對子。字典本身是一個沒有順序的集合。在這個例子中,由於key:value的存在,我們可以更加清晰的看到我們要引用的資料。比如我們想引用分行名稱,我們可以直接寫成branch['name'],程式的可讀性也明顯增強。
關於集合的key,Python中規定只能是不可變型別,通常來說都是字串(像本程式一樣)或者數值。元組作為不可變型別,也是可以作為key,但是要求元組中不能直接或間接(畢竟元組還可以巢狀)的包含可變型別,例如包含列表(list)。
程式的執行效果如下:
我使用的環境:Windows 7 + Python 2.7.17 + PyCharm Community Edition 2016.1.5