Python數(shù)據(jù)類型在常見(jiàn)集合中的語(yǔ)法
Python數(shù)據(jù)類型在平時(shí)的應(yīng)用中有不少的知識(shí)需要大家詳細(xì)的學(xué)習(xí)。下面就向大家介紹相關(guān)的技術(shù)問(wèn)題。Python數(shù)據(jù)類型中的set和C#中的集合(collection)不是一個(gè)概念,這是翻譯的問(wèn)題。
Python中的集合是指無(wú)序的、不重復(fù)的元素集,類似數(shù)學(xué)中的集合概念,可對(duì)其進(jìn)行交、并、差、補(bǔ)等邏輯運(yùn)算。
常見(jiàn)集合的語(yǔ)法為:
- s = set(['a', 'b', 'c'])
不過(guò)set在Python 3.0中發(fā)生了較大的變化,創(chuàng)建一個(gè)集合的語(yǔ)法變成了:s = {1,2,3},用花括弧的方法,與后邊要提到的dict類似。
如果在set中傳入重復(fù)元素,集合會(huì)自動(dòng)將其合并。這個(gè)特性非常有用,比如去除列表里大量的重復(fù)元素,用set解決效率很高,示例如下:
- # -*- coding: utf-8 -*-
- a = [11,22,33,44,11,22,11,11,22,22,33,33,33]
- b = set(a)
- print b
- #輸出 set([33, 11, 44, 22])
另一個(gè)例子,找出兩個(gè)list里面相同的元素(集合求交,其它類推),代碼如下:
- # -*- coding: utf-8 -*-
- a = ["11","22","33"]
- b = ["11","33"]
- c = set(a)&set(b)
- print c
- #輸出 set(['11', '33'])
想想你如果自己實(shí)現(xiàn)這個(gè)算法會(huì)怎么寫(xiě)?然后可以找兩個(gè)大一點(diǎn)的列表,比比和set實(shí)現(xiàn)的效率,你就會(huì)有體會(huì)了。以后在程序里多用set吧。
目前C#的Collections中好像還沒(méi)有Set,但是C++ STL里是有的,不知道C#為什么不實(shí)現(xiàn)這個(gè)有趣的東西。
字典(dict)
用過(guò)C#中Collections的人對(duì)Hashtable應(yīng)該不會(huì)陌生,Python數(shù)據(jù)類型里的哈希表就是字典(dict)了。與set類似,字典是一種無(wú)序存儲(chǔ)結(jié)構(gòu),它包括關(guān)鍵字(key)和關(guān)鍵字對(duì)應(yīng)的值(value)。#t#
C#程序員需要了解的就是,在Python中dict是一種內(nèi)置的數(shù)據(jù)類型,定義方式為:dictionary = {key:value},當(dāng)有多個(gè)鍵值對(duì)時(shí),使用逗號(hào)進(jìn)行分割。
字典里的關(guān)鍵字為不可變類型,如字符串、整數(shù)、只包含不可變對(duì)象的元組,列表等不能作為關(guān)鍵字。字典中一個(gè)鍵只能與一個(gè)值關(guān)聯(lián),對(duì)于同一個(gè)鍵,后添加的值會(huì)覆蓋之前的值。
學(xué)過(guò)數(shù)據(jù)結(jié)構(gòu)的人對(duì)字典的散列查找效率應(yīng)該都有認(rèn)識(shí),所以我建議在可能的情況下盡量多用字典,其它的就不多寫(xiě)了。關(guān)于Python數(shù)據(jù)類型中dict類型(以及l(fā)ist、tuple、set)提供的主要方法,可以參考專門(mén)介紹Python的各種書(shū)籍,大多會(huì)提供一個(gè)詳細(xì)的方法列表。