Python序列(Sequence)


 Sequence是Python的一種內置類型(built-in type),內置類型就是構建在Python Interpreter里面的類型,三種基本的Sequence Type是list(表),tuple(定值表,或翻譯為元組),range(范圍)。可以看作是Python Interpreter定義了這樣三個class。

字符串也是一種序列

1,list,表

Python有一系列的復合數據類型,其中最多才多藝的就是list

class list([iterable])

list用方括號括起來,並且用逗號分隔,成員的類型可以是不一樣的,但一般是一種類型。

1.1 list object的構建

>>> list = []
>>> list = [1,3]
>>> list
[1, 3]

還可以這樣構建

>>> list()   # empty list
[]
>>> [x for x in range(11)]    # [x for x in iterable]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> list((3,5,6))   # list(iterable)
[3, 5, 6]

 

1.2,改變list元素值

 list和string不一樣的是,string是不可變(immutable)的類型,list是可變的(mutable),可以對list整體或一部分進行改變

>>> list = [list, 5]
>>> list
[[1, 3], 5]
>>> list[1] = 6
>>> list
[[1, 3], 6]

 可以對list進行“切片”slice,得到一個子list,也可以對“切片”進行賦值,改變list

范圍引用的語法是[下限:上限:步長],默認步長是1,從前數下標從0開始,從后數下標從-1開始

>>> list = [1,2,3,4,5]
>>> list[2:4]
[3, 4]
>>> list[-3:]
[3, 4, 5]

對切片進行賦值,改變list

>>> list
[1, 2, 3, 4, 5]
>>> list[3:] = [5,4]
>>> list
[1, 2, 3, 5, 4]

從上面可一看到,對於改變list內容的操作,如賦值,都沒有打印結果,也就是表達式返回的None常量。這是Python對可變數據結構(mutable Data Structure)的設計原則。

 

2,tuple

tuple是不可變的(immutable)

class tuple([iterable])

tuple的構建

seq = ()  或  seq = tuple()   #構建empty tuple
seq = (4,)  或  4,     #構建只有一個元素的tuple (4),逗號是必不可少的,不然會返回數字4
seq = (3,4,5) 或  seq = 3,4,5
seq =  tuple([3,4,5])  # 生成 (3,4,5)

 

iterable可以是任何支持iteration的Sequence,Container。上面我們使用的參數是list [3,4,5],也可以就是用tuple  (3,4,5)

對於tuple來說,重要的是逗號",",而不是括號,從上面我們可以看到括號沒有歧義可以省去,但是有些地方必須要,比如:

f(a,b,c)表示這個函數接受三個參數

而f((a,b,c))表示這個函數接受一個參數,這個參數是一個三元的tuple。

 

tuple是不可被賦值的,所以tuple常用來做不同type(異質)的元素的序列集合,而list就常用來做相同type(同質)的元素集合。

 

3,range

range也是一種類型(type),它是一個數字序列(s sequence of numbers),而且是不可變的,通常用在for循環中

class range(stop)

class range(start, stop [, step])

對於第一種構造方式,start默認值為0,step默認值為1

當step為正時,一個range的元素值為r[i] = start + i * step 且 r[i] < stop; step為負時,r[i] > stop

>>> range(6)
[0, 1, 2, 3, 4, 5]
>>> tuple(range(0,-10,-2))
(0, -2, -4, -6, -8)

 

4.多重賦值multiple assignment

多重賦值就是這樣的賦值表達式。

1 t = a,b,c
2 a,b,c = t

而多重賦值本質就是tuple packing (元組打包)和 Sequence unpacking(序列解包)

>>> t = a, b, c      #這就是tuple packing,按照tuple的構建的語法,我們知道這里t肯定是個tuple。

>>>a, b, c  = t      #這就是Sequence unpacking,這里t只要是三元的Sequence就可以了,不一定是tuple,如果t不是三元的,會拋出一個ValueError異常。

 

6. 要得到一個Sequence的長度

用Python的內置函數 len(). 不僅Sequence, Dictionary的長度也是用len()

-----------------

 

 

參考:

http://www.cnblogs.com/vamei/archive/2012/05/28/2522677.html    Vamei的博客

http://docs.python.org/3/library/stdtypes.html#sequence-types-list-tuple-range      Python文檔,內置類型Sequence

http://docs.python.org/3/tutorial/datastructures.html#tuples-and-sequences     Python文檔,tutorial   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM