《Python基礎教程第二版》第二章-Python列表和元祖

afra發表於2019-02-16

序列

例:

 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)

相關文章