1. 程式人生 > >python 序列型別以及list(列表) 和 tuple(元組)詳解 以及range的用法

python 序列型別以及list(列表) 和 tuple(元組)詳解 以及range的用法

參考:

####################################################################

序列:成員是有序排列,可以通過下標偏移量訪問到它的一個或多個成員

在python中有六種內建的序列:列表、元素、字串、Unicode字串、buffer物件和xrange物件。以下僅討論列表和元組物件

列表和元組的主要區別在於:列表可以修改,元組不能

通用序列操作:

所有的序列都可以進行某些特定的操作:

1.索引(index)

2.切片(slice)

3.加(+)

4.乘(*)

5.檢測某個元素是否屬於這個序列(in或not in)

6.計算序列長度(len())

7.找出最大元素和最小元素(min()、max())

1.索引:序列中所有的元素都有編號,索引從0開始遞增。使用負數索引時,python會從右邊開始計數(-1指的是序列最右邊的元素)


2.切片:除了可以使用索引訪問單個元素,還可以使用切片操作來訪問一定範圍內的元素。切片操作需要兩個索引來作為邊界,第一個索引的元素是包含在切片內的,而第二個則不包含(python慣例)


在進行分片的時候開始和結束點需要進行指定(顯示或隱式)。而另一個引數--步長(step length)通常都是隱式設定的,預設值為1.

如果步長為1:切片操作就是按照這個步長逐個遍歷序列的元素,然後返回開始和結束點之間的所有元素。


步長不能為0,但是可以為負數--即從右向左提取元素。使用一個負數作為步長時,必須讓開始點(開始索引)大於結束點


解釋:numbers[6:3:-1]輸出為[7, 6, 5],  因為第一個索引為6,輸出numbers[6]=7,步長為-1,所以從右往左提取元素,

第二個引數為3,表示提取到numbers[3]=4為止,但不包括numbers[3],所以輸出為[7,6,5]

3.序列相加:使用加號可以對兩個型別相同的序列進行連線操作:


4.乘法:使用數字n乘以一個序列會生成新的序列,在新的序列中,原來的序列將被重複n次。


5.成員判斷:可以使用in或not in運算子判斷一個物件是否為某個序列的成員


6.長度、最大值和最小值

python的內建函式:len/min/max,其作用分別是:返回序列中包含元素的數量,返回序列中最小和最大的元素


######################################

型別轉換:使用內建函式list()、tuple()和str()函式可以實現物件轉換


reversed()函式:反轉一個物件,返回一個迭代器(iterator)


reverse:將列表中的元素反向存放


###################################################################3

list:Python內建的一種資料型別。list是一種有序的集合,可以隨時新增和刪除其中的元素

list=['as',  1234, False, ['heloasdf', True, "adsf"]]
list可以儲存不同型別的數值,也可以巢狀儲存

len()函式可以獲得List元素的個數

len(list)


可以使用索引來訪問list中每一個位置的元素,索引從'0'開始

當索引超出範圍時,Python會報一個IndexError錯誤,最大索引值等於len(list)-1


Python允許使用-1來作為索引值訪問最後一個元素,依次類推,可以獲取倒數第2個、第3個元素:

list[-1]


list是一個可變的有序表,可以使用append函式向list中追加元素到末尾;

也可以使用insert函式把元素插入到指定的位置:

list.append("hello")
list.insert(1, 'nihao')


如果要刪除list末尾的元素,

可以使用del運算子:


可以使用pop()函式;

要刪除制定位置的元素,可以使用pop(i)函式,其中i為索引值:

list.pop()
list.pop(1)


如果想要替換某個元素值,可以直接賦值給對應的索引位置:

list[2]="asdfasdf"


如果一個list中一個元素也沒有,即使一個空的list,它的長度為0:

list=[]
len(list)

count:用於統計某個元素在列表中出現的次數


extend:可以在列表末尾一次性追加另一個序列中的多個值,和連線操作不同,extend方法是修改了被擴充套件的序列(呼叫extend方法的序列)

而原始的連線操作返回的是一個全新的列表


index:用於從列表中找出某個值第一個匹配項的索引位置


remove:移除列表中某個值的第一個匹配項


#################################################################

tuple:Python內建的另一種有序列表,也叫做元組

tuple在很多方面和list相似,唯一的區別就是tuple一旦初始化就不能修改


因為tuple不可變,所以程式碼更安全。所以能用tuple代替list就儘量使用tuple

tuple不能使用append()、insert()、pop()函式,不過其他獲取元素的函式和list是一樣的。

不過tuple也有一個漏洞:那就是在tuple定義一個list列表時,可以在這個list列表上使用所有函式


原因:表面上看,tuple的元素確實改變了,但其實變得不是tuple的元素,而是list的元素。tuple從一開始指向的list並沒有改成別的list,所以,tuple所謂的不變是說,tuple的每個元素,只想永遠不變。即指向'a',就不能改成指向'b';指向一個list,就不能改成指向其他物件,但指向的這個list本身是可以改變的

當tuple要定義單個元素時,不能使用

tuple=(1)

因為括號()既可以表示tuple,又可以表示數學公式中的小括號。因此,Python規定,這種情況下,按小括號計算,結果為1

所以,單個元素的tuple在定義時必須加上一個逗號,

tuple=(1,)


#################################################

需要使用元組的地方

1.元組可以在對映(和集合的成員)中作為鍵(key)使用,而列表不行

2.元組作為很多內建函式和方法的返回值存在

#########################################################

range:

函式range是經常用到的函式,用於生成連續整數的列表

help(range)


函式功能:返回一個包含整數的算數級數的列表。range(i, j)返回[i, i+1, i+2, ... , j-1], 引數start預設為0。當步長被給予後,它指定了增量或減量。

#指定stop
range(5)
#指定start和stop
range(1,5)
#指定步長
range(1, 20, 2)  #正序排列
range(20, 1, -2)  #逆序排列