python中數據結構,主要有列表、元組、字典、集合。
python中最基本數據結構是序列(sequence)。序列中每個元素被分配一個序號——即元素位置,也成為索引。第一個索引是0,第二個是1,以此類推。
python包含6種內建序列,其他內建序列類型有字符串、unicode字符串、buffer對象和range對象。
python之中還有一種名為容器(container)的數據結構。容器基本上是包含其他對象的任意對象。序列(例如列表和元組)和映射(例如字典)是兩類主要的容器。序列中每個元素都有自己編號,而映射中每個元素則有一個名字(也稱為鍵)。至于既不是序列也不是映射的容器類型,集合(Set)就是一個例子。
列表用[]表示,元組用(),字典用{key:values...},set{...}列表和元組屬于序列,其中列表是可變序列,可以直接對其進行賦值操作,元組是不可變序列。所有序列類型都可以進行某些特定法操作。這些操作包括:索引(indexing)、分片(sliceing)、加(adding)、乘(multiplying)以及檢查某個元素是否屬于序列的成員(成員資格)。list方法可以適用于類型的序列,而不只是字符串
列表方法:
list.append 在列表末尾追加新的對象
list.count 統計某個元素在列表中出現的次數
list.extend 在列表的末尾一次性追加另一個序列的多個值
a = [1,2,3,] b=[,4,5,6] a.extend(b)
list.index 從列表中找出某個值第一個匹配項的索引位置
list.insert 將對象插入到列表當中
a = [1,2,3] a.insert(2,4)
list.pop 移除列表中最后一個元素,并且返回該元素的值
使用pop方法可以實現一種常見數據結構-棧,后進先出(LIFO)
list.remove 移除列表中某個值得第一個匹配項
list.sort 在原位置對列表進行排序,意味著改變原來的列表,而不是簡單地返回一個以排序的列表副本
當需要一個排好序的列表副本,同時又保留原有列表不變時,使用如下做法是錯誤的:
x = ['a','b','c','d']
y = x.sort()
PRint y
返回的是None
因為sort方法修改了X卻返回了空值,那么最后得到的是以排序的X以及值為none的y。實現這個功能的正確做法是,首先把副本賦值給y,然后對y進行排序:
y = x[:]
y.sort()
再次調用x[:]得到包含了x所有元素的分片,這是一種很有效率復制整個列表的方法,只是簡單的把x賦值給y是沒用的,因為這樣做就是讓x和y都指向同一個列表。
另外一種獲取以排序的列表副本方法是,使用sorted函數:
這個函數實際上可以用于任何一個序列,卻總是返回一個列表。
元組:不可變序列
除了創建元組和訪問元組元素之外,也沒有太多其他操作,元組的分片還是元組,就像列表的分片還是列表一樣。
字符串:格式化
s%稱為轉換說明符(conversion specifier),它們標記了需要插入轉化值的位置。s表示值會被格式化為字符串,如果不是字符串,則會用str將其轉換為字符串
字符串格式化轉換類型(具體參見轉換表)
字符方法:從string模塊中繼承了很多方法
find 可以在一個較長字符串中查找子字符串,它返回子串所在位置的最左端索引,如果沒有找到則返回一個-1
join s是split方法的逆方法,用來在隊伍中添加元素,需要添加的隊伍元素都必須是字符串
seq = ['1','2'] sep = '+' sep.join(seq)或者'/'.join(seq)
replace 返回某字符串的所有匹配項均為替換之后得到的字符串
'hello c++'.replace('c++','python')
split 它是join 的逆方法,用來將字符串分割成序列
'a+b+c+d'.split('+') ['a','b','c','d']
字典:并沒有特殊順序,但是都存儲在一個特定鍵(key),Key可以是數字、字符串甚至是元組
字典的基本行為在很多方面與序列類似:
len(d)返回d中項(鍵-值對)的數量
d[k]返回關聯到鍵K上的值
d[k]=v將值v關聯到鍵K上
del d[k]刪除鍵為K的項
盡管字典和列表由很多特性相同,但也有下面一些重要的區別
鍵類型:字典的鍵不一定為整型數據(但也可能是),也可能是其他不可變類型,比如浮點型(實型)、字符串或者元組
自動添加:即使那個鍵起初在字典中并不存在,也可以為它分配一個值,這樣字典就會建立新的項。
成員資格:表達式k in d 查找的是鍵,而不是值。
字典方法:
clear 清除字典中所有的項,這是個原地操作,所以無返回值,或者說返回為none
copy 返回一個具有相同鍵值的對得新字典(這個方法是淺復制,使用deepcopys實現深復制)
items和iteritems items方法將所有的字典項以列表的方式返回,這些列表項中的每一項都來自于(鍵,值)。但是項在返回時并沒有特殊的順序。
keys和iterkeys 將字典中的鍵以列表形式返回,而Iterkeys則返回針對鍵迭代器。
pop 方法用來獲得對應于給定鍵的值,然后將這個鍵值對從字典中移除
popitem 類似于List.pop,后者會彈出最后一個元素,但不同的是,popitem會彈出隨機的項,因為字典沒有‘最后一個元素’的概念
values 以列表的形式返回字典中的值,與返回鍵的列表不同的是,返回值得列表中可以包含重復的元素。
新聞熱點
疑難解答