Python入門筆記——(2)列表和元組
一、序列
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)列表和元組