1. 程式人生 > >Python入門筆記——(2)列表和元組

Python入門筆記——(2)列表和元組

typeerror 和集 true perl 參數 集合 list函數 方法的參數 運算

一、序列

python包含6種內建的序列:列表、元組、字符串、Unicode字符串、buffer對象和xrange對象。序列中每個元素被分配一個序號即索引,第一個索引為0,第二個為1,以此類推。也可以反向計數,最後一個元素標記為-1,倒數第二個標記為-2,以此類推。序列可以包含其他序列。

列表和元組的區別在於,列表可以修改,而元組不可以修改。

二、通用序列操作

序列的通用操作包括索引、分片、加、乘、檢查成員資格(某元素是否屬於序列的成員)等,此外還有計算序列長度、求序列最大元素最小元素等內建函數。

1、索引

序列第一個位置索引為0,倒序訪問第一個元素索引為-1,如:

>>>
Hello[0] H >>>Hello[-1] o

2、分片

分片操作用於訪問序列中的一部分範圍的元素,分片操作需要提供兩個索引值作為邊界(步長可選),第一個索引的元素包含在分片中,第二個索引的元素則不在分片裏。如果第一個索引為空,則默認從第一個元素開始;如果第二個索引為空,則默認包括後面的所有元素,如:

>>>num = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>>num[3 : 6]
[4, 5, 6]
>>>num[ : 2]
[1, 2]
>>>num[-3 : -1]
[
8, 9] >>>num[-3 : ] [8, 9, 10] >>>num[ : ] [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>>num[0 : 10 : 2] [1, 3, 5, 7, 9] >>>num[8 : 3 : -1] [9, 8, 7, 6, 5]

3、序列加、序列乘

通過加法運算符可以進行序列連接操作,乘法運算可以生成原序列重復多次的新序列。加法運算符只能連接同類型的序列,否則會拋出TypeError錯誤。乘法運算只能使用序列乘以一個正整數。None用於空列表的初始化。

>>>[1, 2, 3] + [4, 5, 6]
[
1, 2, 3, 4, 5, 6] >>>Hello + "C" HelloC >>>Hello * 3 HelloHelloHello >>>[5] * 5 [5, 5, 5, 5, 5]

4、成員資格檢查

檢查一個值是否在序列中,可以使用in運算符,返回布爾值,如果該值在序列中則返回True,反之返回False。

5、長度、最大值和最小值

len函數返回序列中包含的元素數目,max和min函數分別返回序列中的最大值和最小值。

>>>num = [100, 34, 678]
>>>len(num)
3
>>>max(num)
678
>>>min(num)
34
>>>max(15, 28, 90, 7, 666)
666

三、列表

1、列表操作

list函數強制將其他類型轉換為列表,如:

>>>list(Hello)
[H, e, l, l, o]

‘‘.join(somelist)將字符組成的列表轉換為字符串。

可以利用索引訪問列表元素並更改元素值,不能為一個位置不存在的元素賦值。

刪除元素通過del語句實現,del也可以用於刪除字典元素、變量等。

分片賦值可以將原序列替換為序列不等長的新序列,也可以實現插入新元素、刪除現有元素。如:

>>>name = list(Perl)
>>>name[1 : ] = list(ython)
>>>name
[P, y, t, h, o, n]
#分片實現插入元素
>>>num = [1, 5]
>>>num[1 : 1] = [2, 3, 4]
>>>num
[1, 2, 3, 4, 5]
#分片實現刪除元素
>>>num[1 : 4] = []
>>>num
[1, 5]

2、列表方法

方法的調用格式:object.method(param)

append:在列表末尾追加新的對象

count:統計某個元素在列表中出現的次數

extend:在列表的末尾一次性追加另一個序列中的多個值

index:從列表中找出某個值第一個匹配項的索引位置,如果未找到則拋出ValueError錯誤

insert:將對象插入列表中,參數為插入位置和對象值

pop:移除列表中的一個元素(默認為最後一個),並返回該元素的值

remove:移除列表中某個值的第一個匹配項,如果未找到則拋出ValueError錯誤

reverse:將列表中的元素反向存放

sort:在原位置對列表進行排序(默認從小到大)

>>>lst = [1, 2, 3]
>>>lst.append(4)
>>>lst
[1, 2, 3, 4]
>>>x = [[1, 2], 1, 1, [2, 1, [1, 2]]]
>>>x.count(1)
2
>>>a = [1, 2, 3]
>>>b = [4, 5, 6]
>>>a.extend(b)
>>>a
[1, 2, 3, 4, 5, 6]
>>>[we, are, the, knights, who, say, ni].index(who)
4
>>>num = [1, 2, 3, 5, 6, 7]
>>>num.insert(3, four)
>>>num
[1, 2, 3, four, 5, 6, 7]
>>>x = [1, 2]
>>>x.pop(0)
1
>>>x
[2]
>>>x = [to, be, or, not, to, be].remove(be)
>>>x
[to, or, not, to, be]
>>>x.reverse()
[be, to, not, or, to]
>>>x = [4, 6, 2, 1, 7, 9]
>>>x.sort()
>>>x
[1, 2, 4, 6, 7, 9]

sort方法原地修改列表而返回的值為空值,如果需要一個排好序的副本而保留原列表順序不變,下面的方法不可行:

>>>x = [4, 6, 2, 1, 7, 9]
>>>y = x.sort()
#sort方法返回值為空值
>>>print y
None

正確的做法是:

#y為排好序的副本,而原列表順序不變
>>>x = [4, 6, 2, 1, 7, 9]
>>>y = x[ : ]
>>>y.sort()

註意,簡單地把x賦值給y是沒用的,這樣做是把x、y都指向同一個列表,並沒有實現復制。

還可以使用sorted函數:

>>>x = [4, 6, 2, 1, 7, 9]
>>>y = sorted(x)

3、高級排序

如果希望元素可以按照特定方式排序,則可以自定義compare函數作為sort方法的參數,可選的關鍵字參數還有key和reverse,用法如下:

>>>num = [5, 2, 9, 7]
>>>num.sort(cmp)
>>>num
[2, 5, 7, 9]
>>>x = [aaaaaaaa, aaaaaaa, acme, add, aerate]
>>>x.sort(key = len)
>>>x
[add, acme, aerate, aaaaaaa, aaaaaaaa]
>>>x = [4, 6, 2, 1, 7, 9]
#reverse是簡單的布爾值,為真表示進行反向排序,默認為假
>>>x.sort(reverse = True)
>>>x
[9, 7, 6, 4, 2, 1]

四、元組

元組不可修改,使用逗號分隔了一些值就自動創建了元組,空元組的創建需要用沒包含內容的圓括號括起來。一個值的元組必須在值後面加逗號:

>>>1, 2, 3
(1, 2, 3)
>>>()
()
>>>42
42
>>>42,
(42,)
>>>3 * (40 + 2)
126
>>>3 * (40 + 2,)
(42, 42, 42)

tuple函數將一個序列轉換為元組。

元組存在的意義:

(1)在映射(和集合的成員中)當做鍵來使用,因為鍵不可更改;

(2)元組作為很多內建函數和方法的返回值存在。

Python入門筆記——(2)列表和元組