二列表和元組
2.1 序列
python中最基本的數據結構是序列。
python有6種內建序列:列表、元組、字符串、unicode字符串、buffer對象和xrange對象。
列表和元組的主要區別:列表能夠修改,元組不能夠修改;
通用的序列操做:索引、分片、加、乘、檢查某個元素是否屬於序列的成員、計算序列長度、計算最大
元素和計算最小元素。
2.1.1 索引
序列中的元素是從索引0開始;
但是使用負數做爲索引,-1表示最後一個元素;
若是一個函數返回一個序列,能夠直接對返回結果進行索引操做:
如:fourth = raw_input("Year: ")[3] =>當輸入2011後,fourth的值爲1;
2.1.2 分片
使用分片,訪問必定範圍內的元素。分片經過冒號相隔的兩個索引實現。
如:myname = ‘caiyuanwei’
myname[3:7] =》‘yuan’ //輸出索引值爲3到索引值7前面的元素
[前索引:後索引)-----》從前索引開始到後索引以前結束,不包括後索引的元素。!!!!!
分片的技巧:
獲取最後元素:myname[-3:] =》'wei'
獲取最前元素: myname[:3] =》 ‘cai’
顯示所有: myname[:] =》 ‘caiyuanwei’
注意若是分片中第一個索引比第二個索引在序列中晚出現,則會返回空序列。
分片的步長:
默認步長爲1;若是更改步長則在兩個索引後用冒號分隔:如[前索引:後索引:步長]
如:mynumber = [1,2,3,4,5,6,7,8,9,10]
mynumber[::4] =》 [1,5,9]//步長爲4,隔3個元素輸出第四個元素
步長技巧:
步長不能爲0!!!!!!
步長能夠爲負數,負數步長表明倒序輸出!!!
如:mynumber[8:3:-1] =》 [9,8,7,6,5]//從第8個元素倒序到第4個元素
mynumber[0:10:-2] =》 []//0比10在序列中更早出現,因此無輸出
mynumber[::-2] =》 [10,8,6,4,2]//倒序輸出
mynumber[5::-2] =》[6,4,2]
mynumber[:5:-2] =》[10,8]
2.1.3 相加
兩種相同類型的序列能夠進行相加操做,不相同的類型不能相加,如:字符串和列表,雖然都是序列,
可是不能相加。
2.1.4 相乘
對序列進行乘法操做,會生成新序列,將原序列複製x次。
2.1.5 None、空列表和初始化
None是python的內建值,表示爲空(相似於c的null)
若是想創建一個長度必定的空列表能夠:[None]*n
2.1.6 成員資格
判斷一個值是否在序列中,使用in運算符,若是存在返回True,不然返回False
如:myname = ‘caiyuanwei’
‘yu’ in myname =》True
2.1.7 長度、最小值和最大值
取序列長度len();
取序列中最大值max();
取序列中最小值min();
2.2 列表
2.2.1列表建立
list(‘Hello’);//list函數用於建立一個列表,能夠由其它類型序列建立,如例子中由字符串建立列表。
2.2.2列表操做
2.2.2.1列表元素賦值
用索引能夠改變該索引所在的列表元素的值。不能給不存在的元素賦值。
2.2.2.2列表元素刪除
使用del操做符能夠刪除列表中某個索引的元素。
如:test = list('1234567') =》['1','2','3','4','5','6','7']
test[1] = 3 =>['1','3','3','4','5','6','7']
del test[1] => ['1','3','4','5','6','7'] //列表長度在元素刪除後回減少
也可刪除片:del test[2:5] =》 ['1','2']
2.2.2.3分片賦值
test = list('12345678');
test[1:4] = []; =》['1','5','6','7','8']//替換空元素,實現刪除
test[1:1] = list('234'); =》['1','2','3','4','5','6','7','8']//使用相同的索引位置,能夠在該位置實現插入
test[1:] = list('abc'); =》['1','a','b','c']//從某個索引位置開始替換到結尾
test[:] = list('ffff') = 》['f','f','f','f']
2.2.2.4列表方法
python中方法的概念:方法是與對象有緊密聯繫的函數。
方法的調用方式:對象.方法(參數)
列表的方法:(1)append用於列表尾追加元素。append方法直接修改原列表而不是返回一個新列表。
(多是python中方法和函數的區別)
(2)count方法用於統計某個元素出現測次數。
(3)extend方法用於在列表尾追加另外一個列表(擴展)。list1.extend(list2),修改list1,list2不變。
extend看起來像鏈接(+)操做,可是鏈接只會生成新的列表副本,而不會改變原有兩個列表。
用鏈接實現擴展(extend):a= a+b,雖然能夠實現可是沒有extend方法效率高。
用分片替換實現擴展(extend):a[len(a):] = b;能夠實現可是可讀性很差。
(4)index方法用於找出第一個與給定值匹配的元素的索引位置。若是沒有該值則異常。
(5)insert方法用於向列表中插入對象。對象.insert(插入位置,插入值);也能夠用分片賦值實現插入。
(6)pop方法用於刪除列表中某一元素。默認刪除最後一個元素。該方法返回被刪除的元素的值。
pop是惟一一個既能修改列表又返回元素值的列表方法。
默認的append和pop方法結合使用能夠實現棧的操做(LIFO)
使用insert(0,...)和pop方法能夠實現隊列的操做(FIFO)
(7)remove用於移除列表中的某個值的第一個匹配項。remove是一個沒有返回值的原位置改變方法,
它修改列表可是沒有返回值。
(8)reverse方法將列表中的方法反向存儲。
(9)sort方法用於在原位置對列表排序,原位置意味着改變列表而不是返回列表副本。(升序排列)
注意sort沒有返回值,若是當遇到想對某列表進行排序,可是又不想改變原列表的狀況下,則須要
以下操做:
y = x[:];//將列表x複製給y 注意若是隻簡單的用y = x,實際上y和x仍是指向的同一個對象!
y.sort();
sorted函數能夠生成一個列表的副本,sorted是函數不是方法,它能夠用於任何序列,但返回值都
爲列表。
高級排序:
sort方法參數:1.能夠指定排序比較函數,lst.sort(cmp);
2.能夠給每一個元素建立鍵,按照鍵排序,lst.sort(key = len);
3.能夠指定是否反向排序,lst.sort(reverse = True);
2.3 元組
元組值不能改變,元組沒有方法,由於不能改變。即便元組只有一個值也要用‘,’分開!!
42 不是元組,(42)也不是元組,(42,)纔是元組。
3*(40+2) =》126
3*(40+2,) =》(42,42,42)
2.3.1 tuple函數:將一個序列轉換爲元組
2.3.2 元組不可替代的緣由:
1.元組能夠在映射中看成鍵使用,但列表不能夠。
2.元組做爲不少內建函數和方法的返回值存在。 python