本章的名字雖然叫列表和元組,可是本章講的最多的是列表,元祖指講了不多的一部分。由於元組和列表不少方面都是同樣的。python
列表和元組的區別:列表能夠被修改,元祖不能夠被修改。app
python包含的6種內建序列:列表、元組、字符串、Unicode字符串、buffer對象、xrange對象。函數
內建函數返回的是元組,由於元組是不能夠被修改的。code
列表的形式是[] ,元素之間經過逗號分隔。對象
序列(例如列表和元組)和映射(例如字典)是兩類主要的容器。序列中的每一個元素都有本身編號,而映射中的每一個元素則有一個名字(也稱爲建)。blog
集合(set)既不是序列也不是映射類型排序
通用的序列操做:索引(indexing)、分片(slicing)、加(adding)、乘(multiply)、迭代(iteration)索引
迭代(iteration):依次對序列中的每一個元素重複執行某些操做。ip
索引(indexing): 序列中全部元素都是有編號的,編號都是從0開始的。使用複數索引時,python會從右邊,也就是最後一個元素開始計數,最後一個元素的位置爲-1 。ci
例:
>>>'hello'[1]
>>> 'e'
>>> input('year:')[3]
year:2016
>>> '6'
python3用input代替了python2中的raw_input
分片(slicing):分片是經過冒號隔開兩個索引來實現。第一個索引的元素包含在分片內,第二個不包含。
num[第一個索引:第二個索引:步長]
例如:
>>>num = [1,2,3,4,5,6]
>>>num[1:4:2]
[2,4]
第一個索引、第二個索引和步長均可覺得負數。步長不能爲0,爲0的時候不執行。
當使用一個負數爲步長的時候,必須讓開始點(開始索引),大於結束點。
加(adding):列表和字符串沒法鏈接在一塊兒。只有兩種相同類型的序列才能進行鏈接操做。
例如:[1,2,3] + [4,5,6] 結果爲[1,2,3,4,5,6]
'hello ' + 'world' 結果爲 'hello world'
[1,2,3] + 'hello' 錯誤
乘(multiply):用數字x乘以一個序列會生成新的序列,而新的序列中,原來的序列將會被重複x次
例如:'he' * 5 'hehehehehe'
[1] * 5 [1,1,1,1,1]
[]表示空列表,裏面什麼東西都沒有
None是一個python內建值,它確切的含義是「這裏什麼都沒有」
[None] * 5 [None,None,None,None,None]
python3中的//表示整除,/表示除,不管值是整型仍是浮點型。python2中默認的/表示整除。
成員資格:in
爲了檢查一個值是否在序列中,可使用in運算符。
例如:>>>st = ['as','df','gh'] (列表成員也能夠是列表,這樣查看的時候是查看一個列表是否在該列表中)
>>>'as' in st
True
>>>'bb' in st
False
>>> 'st' in 'string'
True
長度、最小值、最大值:len()、min()、max()
len()、min()、max()屬於內建函數。
len()返回序列中所包含的元素個數。
min()和max()返回序列中的最小和最大的元素。
例如:>>> num = [3,4,2,5,1]
>>>len(num)
5
>>>max(num)
5
>>>min(num)
1
>>>max(2,3,5,1)
5
max()和min()的參數不只能夠是一個序列,還能夠以多個數字直接做爲參數。
列表:
list函數:能夠將全部序列轉換成列表。
例如:>>>list('hello')
['h','e', 'l', 'l', 'o']
注意:list使用於全部類型的序列,不僅是字符串。
基本列表操做:
列表可使用適用於序列的標準操做,例如索引、分片、連接、乘法。
元素賦值:能夠直接用下標的方法進行賦值,不能對一個不存在的元素進行賦值。 x = [1,2,3] x[1] = 5 結果x=[1,5,3],賦值索引的下標不能超過2,超過2爲不存在的元素。
刪除元素:是用del語句來實現。del x[1] 結果x=[1,3] 。 del能夠用於不少變量,不只是列表,字典也是能夠的。
分片賦值:它可使程序一次爲多個元素賦值。
使用分片時能夠時使用與原序列不等長的序列將分片替換。
>>> name = list('perl')
>>> name[2:] = list('python')
>>> name
['p','e','p','y','t','h','o','n']
分片賦值能夠在不須要替換任何元素的狀況下插入新的元素
>>> num = [1,5]
>>> num[1:1] = [2,3,4]
>>> num
[1,2,3,4,5]
與之相似,分片也能夠刪除元素
>>> num[1:4] = []
>>> num
[1,5]
固然,上述操做也能夠加上步長。
列表方法:append、count、extend、index、insert、pop、remove、reverse、sort、高級排序。
append:用於在列表末尾追加新的對象。 lst = [1,2,3] lst.append(4) 結果lst = [1,2,3,4] , 列表自己被修改。
count:統計某個元素在列表中出現的次數。[[1,2], [1,1],1,1,[2,3]].count([1,1]) 結果爲1, [[1,2], [1,1],1,1,[2,3]].count(1) 結果爲2
extend:能夠在列表的尾部一次性追加另一個序列中的多個值。a=[1,2,3] b=[4,5,6] a.extend(b) 結果a = [1,2,3,4,5,6] 。列表自己的值被修改。若是使用+號鏈接兩個列表,也能夠獲得相同的值,可是列表自己沒有被修改,只是返回值是相同的。a + b 返回的結果是[1,2,3,4,5,6], 可是a依舊是[1,2,3]
index:從列表中找出某個值第一個匹配項的索引位置。當沒有這個元素時會發生異常。st = ['qw','er','er','er','sd'] st.index('er') 結果爲1
insert:用於將對象插入到列表中。st.insert(2,'a') 結果st = ['qw','er','a','er','er','sd'] , 列表自己進行的修改。
pop:會移除列表中的一個元素,默認是最後一個元素,而且返回這個元素的值。x=[1,2,3,4] x.pop() 結果4 x.pop(0) 結果 1 。pop是惟一一個既能修改列表又能返回元素值得列表方法。
remove:用於移除列表中某個值的第一個匹配項。st.remove('er') 結果st = ['qw','a','er','er','sd'] 。該方法是一個沒有返回值的原位置改變方法。
reverse:將列表中的元素反向存放。a.reverse() a=[3,2,1]。 該方法也改變了列表可是不返回值(就像remove和sort)
sort:該方法用於在原位置對列表進行排序。原來的列表被改變,不是簡單的返回一個已經排序的列表副本。該方法沒有返回值。
>>> x = [3,1,2,4]
>>> x.sort() ; x
[1,2,3,4]
>>> y = x.sort() 錯誤,該方法沒有返回值。y的值是None
若是隻是想得到一個已排序的列表副本,原列表仍然保留,能夠只用下面的方法:
>>> y = x[:] 這裏不能簡單的使用y=x 來賦值,這樣是令y也指向x的值,x改變時y也隨之改變。x[:]是包含了x全部元素的分片,這是一種頗有效率的賦值整個列表的方法
>>> y.sort() 使用副原本排序,不會修改原始的列表。
也是使用sorted函數:
>>> y = sorted(x)
此時,y的值爲[1,2,3,4] ,x的值仍爲[3,1,2,4]
sorted 函數不只能夠用於列表,還能夠用於任何序列,老是返回一個列表:
>>> sorted('python')
['h', 'n', 'o', 'p', 't', 'y']
高級排序:sort方法有兩個可選的參數key和reverse.
若是想使排序結果爲逆序,能夠調節參數x.sort(reverse = True)便可。
如想像根據長度來排序,可使用len 即 x.sort(key = len)
元組:不可變序列
若是你使用逗號隔開了一些值,那麼你就自動建立了一個元組。
>>> 1,2,3
(1,2,3)
元組大部分是經過圓括號括起來的,空元組能夠用沒有包含內容的兩個括號表示()。
包含一個值得元組,不是簡單的一個值就能夠,而是要在這個值後面加上一個逗號。
>>> 3 * (42)
126
>>> 3 * (42,)
(42, 42, 42)
tuple函數:能夠將一個序列做爲參數,轉換成元組。若是參數是元組,那麼該參數會被原樣返回。
>>> tuple([1,2,3])
(1,2,3)
>>> tuple('abc')
('a', 'b', 'c')
>>> tuple((1,2,3))
(1,2,3)