列表與元組的主要不同在於,列表是可以修改的,元組不可以。列表適用於需要中途添加元素的情形,元組適用於出於某種考慮禁止修改序列的情形。在需要處理一系列值時,序列很有用,在數據庫中,你可能使用序列來表示人,其中第一個表示姓名,第二個表示年齡。用列表表示如下:
user=['Andy',20]
序列還可包含其他序列
user=['Andy',20] use=['john',21] database=[user,usr] database [['Andy', 20], ['john', 21]] data=['Aurora',user] data ['Aurora', ['Andy', 20]]
有幾種操作使用於所有序列,包括索引、切片、相加、相乘和成員檢查。另外還有一些內置函數,可用於確定序列的長度以及找出序列中最大和最小的元素。
索引:
序列中所有的元素都有編號-從0開始遞增
set='Hello' set[0] 'H' 字符串就是由字符組成的序列,索引0指向第一個元素,這裏爲字母H,不同於其他一些語言,python沒有表示字符的類型。因此一個字符就是隻包含一個元素的字符串。
這稱爲索引,還可使用負索引來獲取元素
set[-1] 'o'
對於字符串字面量(以及其他序列字面量)可直接對其執行索引操作,無需先將其賦給變量,這與先賦給變量在對變量執行索引操作的效果一樣。
'Hello'[1] 'e'
如果函數調用返回一個序列,可直接對其執行索引操作。例如,你只想獲取用戶輸入的姓名第二位:
name=input('name: ')[2] name: john name 'h'
切片:
使用索引來訪問單個元素外,還可使用切片來訪問特定範圍內的元素,使用兩個索引用冒號分隔:
tag='<a href="How long have you been studying python">python web site</a>' tag[9:30] 'How long have you bee' tag[49:-4] 'python web site'
切片適用於提取序列一部分,其中的編號非常重要,第一個索引是包含第一個元素的編號,第二個索引是切片後前一位的元素編號(下標從0開始)
number=[1,2,3,4,5,6,7,8,9,10] number[3:6] [4, 5, 6]
兩個索引來指定切片的邊界,其中一個索引指定的元素包含在切片內,第二個索引指定的元素不包含在切片內。
簡寫:
# 如果切片結束與序列末尾,可省略第二個索引: number[-3:] [8,9,10] # 如果切片始於序列開頭,可省略第一個索引: number[:3] [1,2,3] # 複製序列 number[:] [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
步長:
執行切片操作時,顯示或隱示地制定起點和終點,但通常省略另一個參數,即步長。在普通切片中,步長爲1(從一個元素移動到下一個元素),切片包含起點和終點之間的所有元素。
number[0:10:1] [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] number[0:10:2] [1, 3, 5, 7, 9]
也可以簡寫:
number[::4] [1, 5, 9]
步長不能爲0,但是可以是負數,這樣獲取元素的位置是從右向左。
number[::-2] [10, 8, 6, 4, 2]
步長爲正數時,它從起點移到終點,步長爲負數時,它從終點移到起點。
序列相加:
[1,2,3]+[4,5,6] [1, 2, 3, 4, 5, 6] [1,2,3]+'world' Traceback (most recent call last): File "<pyshell#12>", line 1, in <module> [1,2,3]+'world' TypeError: can only concatenate list (not "str") to list
不能拼接序列與字符串,雖然他們都是序列,一般不能拼接不同類型的序列。
乘法:
'hello' * 2 'hellohello' [2] * 3 [2, 2, 2]
如先定義序列但並不爲其賦值可用
name=[None] * 5 name [None, None, None, None, None]
成員資格:
檢查特定的值是否包含在序列中,使用in.滿足條件返回true,否則返回false.
name='Andy' 'A' in name True # 對於字符串來說只有它包含的字符纔是其成員或元素。 'p' in 'python' True
長度、最小值、最大值
number=[100,20,80] len(number) 3 max(number) 100 min(number) 20 max(2,3,7) 7
列表常用方法
#賦值 x = [1,2,1] x[1]= 3 x [1, 3, 1] # 刪除元素 x = [1,3,1] del x[1] x [1, 1] # 給切片賦值 name=list('Perl') name ['P', 'e', 'r', 'l'] name[3:]=list('ar') name ['P', 'e', 'r', 'a', 'r'] # 還可以在不刪除原有元素的情況下插入新元素 name[1:1]=list('el') name ['P', 'r', 'l', 'e', 'r', 'a', 'r'] del name[1::2] name ['P', 'l', 'r', 'r']
方法是與對象(列表、數、字符串等)聯繫緊密的函數。
# 在末尾追加元素:append number.append(4) number [1, 2, 3, 4] # 清空列表:clear number.clear() number [] # 複製:copy a = [1,2,3] b = a b[1]=4 b [1, 4, 3] a [1, 4, 3] a = [1,4,3] b=a.copy() b[1]=5 a [1, 4, 3] # 計數:count ['to','be','or','not','to','be'].count('to') 2 x=[[1,2],1,2,[1,2,[2,1]]] x.count(1) 1 # 擴展追加exend a =[1,2,3] b= [4,5,6] a.extend(b) a [1, 2, 3, 4, 5, 6] b [4,5,6] a+b [1, 2, 3, 4, 5, 6, 4, 5, 6] a [1, 2, 3, 4, 5, 6] b [4, 5, 6] # 查找第一次在序列中出現的索引 a =['to','be','or','not','to','be'] a.index('be') 1 a[1] 'be' # inster:插入 number = [1,2,3,4,5] number.insert(2,8) number [1, 2, 8, 3, 4, 5] # pop刪除末尾最後一個元素並返回刪除元素,pop是唯一既修改列表又返回一個非none值的列表方法。 number.pop() 5 number [1, 2, 8, 3, 4] number.insert(0,number.pop(0)) # 刪除第一個指定值的元素 a =['to','be','or','not','to','be'] a.remove('to') a ['be', 'or', 'not', 'to', 'be'] # 倒序排列:reverse number = [2,8,3,4] number.reverse() number [4, 3, 8, 2] # 對列表就地排序指對原表進行修改:sort number = [4,3,8,2] number.sort() number [2, 3, 4, 8]
元組:不可修改的序列
元組的幾種寫法。
(1,2,3) 1,2,3 (2,) 2,
3 * (20+2) 66 3* (20+2,) (22, 22, 22) (22)與22完全等效,加上逗號,就能完全改變表達式的值
函數tuple的工作原理與list很像,它將一個序列作爲參數,並將其轉換爲元組。如果參數是元組,就原封不動的返回。
tuple([1,2,3]) (1,2,3) tuple('abc') ('a','b','c') tuple((1,2,3)) (1,2,3) x = 1,2,3 x[1] 2 x[0:2] (1,2)