序列
例:
Edward = [`abc`, 12]
序列中的所有元素都是有編號的,從0開始遞增。
Note: 使用負數索引-1,Python會從右邊,也就是從最後一個元素開始計數。最後一個元素的位置編號是-1.
索引操作
字串、函式可以直接對返回結果進行操作
‘hello’[1]
fo = raw_input(`year: `)[2]
分片
分片通過冒號:
隔開兩個索引。
程式碼:
numbers = [1, 2, 3, 4]
number[1:2]
輸出:
[2, 3]
第一個索引:
提取的第一個元素的編號
第二個索引:
分片之後,剩餘部分的第一個元素的編號。
Note:分片第二個索引指向的元素取不到。
簡而言之:
分片操作的實現需要兩個索引作為邊界。
第一個索引元素是包含在分片內的。
第二個索引元素不在分片內。
思考:
numbers = [1,2,3,4,5,6,7,8,9,10]
如何訪問最後3個元素。
1.顯示操作
numbers[7:10]
#索引10指向第11個元素,第11個元素不存在。為了讓分片包含最後一個元素,必須提供最後一個元素的下一個元素的索引作為邊界。
2.從尾開始計數(不可行)
numbers[-3:-1]
#無法訪問最後一個元素
3.使用索引0訪問最後一個元素(不可行)
numbers[-3:0]
#只要分片最左的索引比右邊的晚出現在序列中,一律返回空序列。
4.置空最後一個索引(優雅,推薦)
numbers[-3:]
同樣適用序列開始的元素:
numbers[:3]
複製序列
複製整個序列,將兩個索引都置空。
number2 = numbers[:]
note:
number2 = numbers
#不可行,會將number2與numbers指向同一個序列
步長
第三個引數是步長。Python中預設步長為1.
numbers[0:10:2]
#取步長為2,取間隔為1個元素的分片。
Note:
步長不能為0。
負數步長,分片從右到左提取元素。
序列加法、乘法
endings = [`st`,`nd`,‘rd’] + 17*[`th`]
+ [`st`,`nd`,‘rd’] + [`th`]*7
#17*[`th`]表示17個[`th`]
空列表、None
空列表
[]
用None初始化
seq = [None]*10
成員資格
in運算子:布林運算子,檢查值是否在序列中。
subject = `$$$ abssdjk $$$!`
`$$$` in subject
users = [`bob`,`jack`]
raw_input(`your name:`) in users
長度、最小值和最大值
內建函式
len、min、max
len
函式
返回序列中所有包含元素的數量
min
函式、max
函式
返回序列中最大和最小的元素
Note:
序列包括:
列表、字串、元組
故:以上序列的特種對於列表字串和元組都適用。
列表
列表可以修改:
- 元素賦值
- 元素刪除
- 分片賦值
- 列表方法
list函式
用於建立列表,適用於所有型別的序列,例如字串
例:
list(`hello`)#根據字串建立列表[`h`,`e`,`l`,`l`,`o`]
列表轉字串
``.join(somelist)
列表基本操作
1. 元素賦值
2. 刪除元素
3. 分片賦值
1. 元素賦值
x = [1,2,3]
x[1] = 6
2. 刪除元素
names = [`bob`,`jack`,`afra`]
del names[2]
#列表長度減一
3. 分片賦值
name = list(`afra`)
name[1:] = list(`lpha`)
分片賦值:
1.可以使用與原序列不等長的序列將分片替換
name = list(`perl`)
name[1:] = list(`ython`)
2.可以在不需要替換任何原有元素的情況下插入新元素
number = [1,5]
number[1:1] = [2,3,4]
3.可以刪除元素
number = [1,2,3,4,5]
number[1:4] = []
列表方法
方法:
一個與某些物件有緊密聯絡的函式。
方法呼叫:
物件.方法(args)
列表方法
1.append
2.count
3.extend
4.index
5.insert
6.pop
7.remove
8.reverse
9.sort
10.高階排序
1.append
在列表末尾追加新物件,直接修改原列表
number = [1,2,3]
number.append(4)
2.count
統計某個元素在列表中出現的次數
x = [1,1,2,2,2,3]
x.count(1)
3.extend
在列表末尾一次性追加另一序列的多個值。即:用新列表擴充套件原因的列表。
Note:
extend和連線操作`+`的區別:
extend方法修改了序列
原始的連線操作不修改序列,返回一個全新的列表
連線操作效率比extend方法低
4.index
從列表中找出某個值第一個匹配項的索引位置
knight = [`hao`,`a`]
knight.index(`hao`)
5.insert
將物件插入到列表中。
numbers = [1,2,3]
number.insert(3,`four`)
6.pop
移除列表中的一個元素(預設最後一個),返回該元素的值。
pop方法是唯一修改列表又返回元素值的列表方法。
Python中實現棧:,出棧pop
,入棧append
。
x[1,2,3,4]
x.pop()
x.pop(0)
Note:在JavaScript中,pop只彈出棧頂值,不會返回棧頂值,可使用top()獲取棧頂值
7.remove
移除列表中某個值的第一個匹配項。修改列表,沒有返回值。
x = [`i`,`want`,`to`,`to`]
x.remove(`to`)
8.reverse
將列表倒置。改變列表,沒有返回值。
x = [1,2,3]
x.reverse()
9.sort
在原位置對列表排序。修改列表,返回None。
x = [8,7,2,43,45]
x.sort()
思考:
使用者需要一個排好序的列表副本,但是保留原有列表不變。
思路:
把x的副本賦值給y,對y進行排序。
程式碼:
x = [1,2,4,5,6,1,23,2,2,3,]
y = x[:]
y.sort()
#強調:x[:]是一種很有效率的複製整個列表的方法。只是簡單的把x賦值給y,會讓x和y都指向同一個列表。
使用sorted
函式
#獲取已排序的列表的副本
x = [1,3,4,5,2]
y = sorted(x)
#note:sort()是列表方法,sorted是函式
10.高階排序
1.cmp自定義比較函式
numbers.sort(cmp)
2.key 為每個元素建立一個鍵,根據鍵排序
numbers.sort(key = len)
3.reverse = true
numbers.sort(reverse = true)
元組
圓括號表示,不可修改
(1,2,3)
空元組
()
一個值的元組
(42,)
Note:
必須加逗號,即使只有一個值。逗號非常重要。
(4+2) #不是元組
(4+2,) #是元組
tuple
函式
一序列作為引數轉換為元組
tuple([1,2,3])#(1,2,3)
tuple(`abc`)#(a,b,c)