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) #逆序排列