序列(列表和元組)
2.2 通用序列操作
1)索引
從左到右計數(第一個)為0,從右到左計數(最後一個)-1.
字串可以直接使用索引:"hello"[2]
2)分片
提供兩個邊界作為索引,第一個邊界包括,第二個邊界不包括。
numbers = {1,2,3,4,5,6,7,8,9,10}
優雅捷徑:
numbers[-3:-1] [8,9]
numbers[-3:0] [] 左邊索引必須比右邊索引早出現才不是空集
numbers[-3:] 不填邊界表示到最邊界處
numbers[:] 整個列表
步長:
預設步長是1,如果不是1,需要指定
numbers[m:n:k] 指定步長為k
步長不能為0,但步長可以為負數,為負數時,列表的左右邊界應該是從右到左的。
3)序列相加:
[1,2,3] + ["hello"] [1, 2, 3, 'hello']
但列表和字串不能相加
4)乘法:
“python” * 2 “pythonpython”
[42] * 3 [42,42,42]
None 空列表 初始化
5)成員資格:in
返回布林值:某個物件是否為一個序列的成員
6)長度
內建函式len,max,min
-----------------------------------------------------------------------------
2.3 列表:
1.list函式
將字串或其他系列轉換成列表
由於字串不可變,轉換成列表後可以改變:
list("hello") ['h','e','l','l','o']
ps:用 ''.join(somelist)可以將一個列表somelist轉換成字串
2.列表基本操作
1)改變列表:元素賦值
不能為一個不存在的索引位置賦值
2)刪除元素
del names[2]
刪除後列表長度自動縮減,順序保持
3)分片賦值
一次為多個元素賦值
a 注意在普通賦值時,不存在的索引處不能賦值,但是分片賦值卻可以實現使用與原分片不等長的序列將分片替換:
name = list('perl')
name[1:] = list('ython')
b 替換一個空分片的分片賦值可以實現插入一個序列
c 同理,給一個分片賦值一個空的分片可以用來刪除這個分片
3.列表方法
1)append
lst.append(xxx):注意沒有返回值!
2)count
統計某個元素在列表中出現的次數:lst.count(xxx)
3)extend
在一個序列的末尾追加另一個序列中的多個值
a.extend(b) 將b追加到a後面了,a此時改變了
4)index
names.index('jmz')
找到列表中第一個匹配項的索引,找不到會引發異常
5)insert
names.insert(5,'jmz')
將‘jmz’這個名字插入為索引5位置處
6)pop
lst.pop() 移除最後一個元素並返回這個移除的元素
pop方法是唯一一個既能修改列表又能返回元素的方法,注意以上方法中修改列表的方法均不返回值。
7)remove
names.remove('jmz') 刪除第一個匹配的專案
8)reverse
names.reverse() 將列表元素倒序存放
9)sort
注意也是沒有返回值
x.sort() x變得有序,但這個表示式並不返回值
y = x.sort並不能將x的有序形式賦值給y
可以這樣:
y = x[:]
y.sort()
或者:
y = sorted(x)
來實現一樣的功能
10)高階排序
cmp引數來指定自己的排序方式:numbers.sort(cmp)
定義你自己的cmp函式,小於時返回負數,大於時返回正數,相等時返回0
key引數指定排序鍵:names.sort(key = len) 按照長度
reverse引數指定是否反向排序:number.sort(reverse = true)
-----------------------------------------------------------------------------
2.4 元組學習:不可變序列
如果你用逗號隔開一些值,那麼就自動建立了元組
1)tuple函式
將字串,序列轉換為元組,如果被轉換的本身就是元組,則原樣返回。
tuple([1,2,3]) (1,2,3)
tuple('hello') ('h','e','l','l','l','o')
tuple((1,2,3)) (1,2,3)
-----------------------------------------------------------------------------
總結:
列表:[] 可變序列
元組:() 不可變序列
一些方法