python中常見的資料結構可以統稱為容器(container)。序列(如列表和元組)、對映(如字典)以及集合(set)是三類主要的容器。
一、序列(列表、元組和字串)
序列中的每個元素都有自己的編號。python中有6種內建的序列。其中列表和元組是最常見的型別。其他包括字串、unicode字串、buffer物件和xrange物件。下面重點介紹下列表、元組和字串。
1、通用序列操作:
從列表、元組以及字串可以「抽象」出序列的一些公共通用方法(不是你想像中的crud),這些操作包括:索引(indexing)、分片 (sliceing)、加(adding)、乘(multiplying)以及檢查某個元素是否屬於序列的成員。除此之外,還有計算序列長度、最大最小元 素等內建函式
1)索引:
1 str1='hello'
2 nums=[1,2,3,4]3 t1=(123,234,345)4 printstr1[0]5 print nums[1]6 print t1[2]
輸出:h
2)分片:
分片操作用來訪問一定範圍內的元素。分片通過冒號相隔的兩個索引來實現:
1 nums=range(10)2 printnums3 print nums[1:5]4 print nums[6:10]5 print nums[1:]6 print nums[-3:-1]7 print nums[-3:] #包括序列結尾的元素,置空最後乙個索引
8 print nums[:] #複製整個序列
輸出:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4]
[6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[7, 8]
[7, 8, 9]
不同的步長,有不同的輸出:
1 nums=range(10)2 printnums3 print nums[0:10] #預設步長為1 等價於nums[1:5:1]
4 print nums[0:10:2] #步長為2
5 print nums[0:10:3] #步長為3
6 ##print nums[0:10:0] #步長為0
7 print nums[0:10:-2] #步長為-2
輸出:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 2, 4, 6, 8]
[0, 3, 6, 9]
3)序列相加:
兩種相同型別的序列才可以相加;
1 str1='hello'
2 str2='world'
3 print str1+str24 num1=[1,2,3]5 num2=[2,3,4]6 print num1+num27 print str1+num1
輸出:hello world
[1, 2, 3, 2, 3, 4]
traceback (most recent call last):
file 「f:\python\test.py」, line 7, in
print str1+num1
typeerror: cannot concatenate 『str』 and 『list』 objects
4)乘法:
1 print [none]*10
2 str1='hello'
3 print str1*2
4 num1=[1,2]5 print num1*2
6 print str1*num1
輸出:[none, none, none, none, none, none, none, none, none, none]
hellohello
[1, 2, 1, 2]
traceback (most recent call last):
file 「f:\python\test.py」, line 5, in
print str1*num1
typeerror: can』t multiply sequence by non-int of type 『list』
5)成員資格:
in運算子會用來檢查乙個物件是否為某個序列(或者其他型別)的成員(即元素):
1 str1='hello'
2 print 'h' instr13 print 'h' instr14 num1=[1,2]5 print 1 in num1
輸出:false
true
true
6)長度、最小值和最大值:
1 str1='hello'
2 printlen(str1)3 printmax(str1)4 printmin(str1)5 num1=[1,2,1,4,123]6 printlen(num1)7 printmax(num1)8 print min(num1)
輸出:o
h2、列表
列表是可變的,這是它區別於字串和元組的最重要的特點,一句話概括即:列表可以修改,而字串和元組不能。
1 list1=['hello','world']2 printlist13 list2=[1,2,3]4 print list2
輸出:[『hello』, 『world』]
[1, 2, 3]
1)list函式:
通過list函式(其實list是一種型別而不是函式)對字串建立列表非常有效:
1 list3=list("hello")2 print list3
輸出:[『h』, 『e』, 『l』, 『l』, 『o』]
join函式:
實現將由字元組成的列表轉換為字串;
1 somelist = ['a','b','c']2 list1 =``.join(somelist)3 print list
輸出:'abc'
2)基本列表操作:
元素賦值:
1 x = [1,1,1]2 x[1] = 2
3 print x
輸出:[1,2,1]
刪除元素:
1 list1 = ['h','e','l','l','o']2 del list1[1]3 print list1
輸出:['h','l','l','o']
分片賦值:
1 name = list('perl')2 name[1:] = list('ython')3 print name
輸出:['p','y','t','h','o','n']
3)列表方法:
在列表末尾追加新的物件;
輸出:[1,2,3,5]
count方法:
統計某個元素在列表**現的次數;
result = ['to','be','or','not','to','be']print result.count('to')
輸出:extend方法:
extend方法會改變原來的列表,連線操作(『+』)不會改變原來的列表;
python資料結構 棧講解
應用實戰 棧有時也稱作下堆疊,是乙個有序集合,以列表的形式,但是他的新增和移除操作總是發生在同一端,被稱為頂端,也叫做棧頂,另一端被稱為低端,也叫棧底。可以理解為在桌子上疊放書本,我們放上去之後如果拿的話也是從上往下拿,放的話則是從下往上,我們往往取的都是放的時間最晚的,就是這個原理。棧的操作型別有...
資料結構 棧講解
棧的基本原理 知識講解 棧也是一種操作 或者說運算 受到限制的特殊線性表。其插入進棧和刪除操作都限制在表的一端進行,這一端被稱為 棧頂 top 相對a的另一端稱為 棧 bottom 插入操作一般稱之為 進棧 push 或者 壓棧 刪除操作稱之為 出棧 pop 棧的特點是 先進後出 fifo,firs...
資料結構 佇列講解
佇列知識講解 佇列是一種操作 或者說運算 受到限制的特殊線性表。其插入操作 限定在表的一端進行,稱為 入隊 其刪除操作則限定在表的另一端進隊尾行,稱為 出隊 插入一端稱為隊尾 rear 刪除一端稱為隊頭 ront 假設有佇列q a1,a2,a3,an 則佇列q中的元素是按a1,a2,a3,an的順序...