序列(列表和元組)
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)
-----------------------------------------------------------------------------
總結:
列表:[] 可變序列
元組:() 不可變序列
一些方法