python學習筆記(2)列表和元組
本篇主要記錄些python中列表和元組的筆記。
- 序列概述
python中最基本的資料結構是序列。序列中每個元素被分配一個序號——即元素的位置,也稱為索引。第一個索引是0,第二個則是1,以此類推。
python有6種內建序列:列表、無組、字串、Unicode字串、buffer物件和xrange物件。這裡先介紹最常用的兩種型別:列表和元組。
列表和元組的主要區別在於:列表可以修改,而無組不能。
列表的各個元素通過逗號分隔,寫在方括號中:
>>>edward=['Edward',42]
2、通用序列操作
2.1 索引
>>> greeting='Hello'
>>> greeting[0]
'H'
最後一個元素的位置編號是-1:
>>> greeting[-1]
'o'
字串字面值也能夠直接使用索引:
>>> 'Hello'[1]
'e'
如果一個函式呼叫返回一個序列,可以直接對返回結果進行索引操作:
>>> fourth=raw_input("Year: ")[3]
Year: 2005
>>> fourth
'5'
2.2 分片
使用分片操作來訪問一定範圍內的元素:
>>> numbers=[1,2,3,4,5 ,6,7,8,9,10]
>>> numbers[3:6]
[4, 5, 6]
第1個索引是需要提取部分的第1個元素的編號,最後的索引則是分片後剩下部分的第1個元素的編號,即第1個索引的元素是包含在分片內的,第2個則不包含在分片內。
注:只要分片中最左邊的索引比它右邊的晚出現在序列中,結果就是一個空的序列,如numbers[-3:0]。如果分片所得部分包括序列結尾的元素,可以走這個捷徑:numbers[-3:]
>>> numbers[-3:0]
[]
>>> numbers[-3:]
[8, 9, 10]
>>>
同樣的,序列開始的元素也可以這樣:
>>> numbers[:3]
[1, 2, 3]
要取整個序列:
>>> numbers[:]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
分片也可以設定步長:
>>> numbers[0:10:2]
[1, 3, 5, 7, 9]
意思為:按步長2取索引為0到9的數。
步長不能為0,但是可以為負數,即從右往左取:
>>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> numbers[8:3:-1]
[9, 8, 7, 6, 5]
2.3 序列相加
使用加號進行序列的連線,而不是對應數值的加法運算:
>>> [1,2,3]+[4,5,6]
[1, 2, 3, 4, 5, 6]
注:列表和字串是無法連線到一起的,即只有兩種相同型別的序列才能進行連線操作。
2.4 乘法
用數字x乘以一個序列,表示將序列重複x次:
>>> ['python']*5
['python', 'python', 'python', 'python', 'python']
>>>
2.5 空列表初始化
>>> sequence=[None]*10
>>> sequence
[None, None, None, None, None, None, None, None, None, None]
>>> sequence[0]
>>>
表示sequence是一個長度為10的空列表。
2.6 判斷某值是否存在序列中
檢查一個值是否在序列中,使用in運算子,為真返回True,假返回False.
>>> permissions='rw'
>>> 'w' in permissions
True
>>> 't' in permissions
False
2.7 序列的長度、最大值、最小值
>>> numbers=[100,34,678]
>>> len(numbers)
3
>>> max(numbers)
678
>>> min(numbers)
34
>>>
3 列表
列表可以使用所有適用於序列的標準操作,如索引、分片、連線和乘法,但是列表是可變的,可以改變列表的內容。
3.1 根據字串建立列表
>>> list('List')
['L', 'i', 's', 't']
>>>
3.2 元素賦值
使用索引標記來為某個特定的、位置明確的元素賦值,以改變列表。
>>> x=[1,1,1]
>>> x[1]=2
>>> x
[1, 2, 1]
>>>
注:不能為一個位置不存在的元素進行賦值。
3.3 刪除元素
>>> del x[1]
>>> x
[1, 1]
>>>
3.4 分片賦值
使用分片賦值可以使用與原序列不等長的序列將分片替換。
>>> name=list('Perl')
>>> name
['P', 'e', 'r', 'l']
>>> name[2:]='DING'
>>> name
['P', 'e', 'D', 'I', 'N', 'G']
>>>
分片賦值語句可以在不需要替換任何原有元素的情況下插入新的元素:
>>> numbers=[1,5]
>>> numbers[1:1]=[2,3,4]
>>> numbers
[1, 2, 3, 4, 5]
>>>
用分片賦值來刪除元素也是可以的:
>>> numbers[1:4]=[]
>>> numbers
[1, 5]
>>>
3.5 列表的幾種方法
(1) append
在列表末尾追加新的物件,直接修改的原來的列表:
>>> numbers
[1, 3, 5]
>>> numbers.append(1)
>>> numbers
[1, 3, 5, 1]
>>>
(2) count
統計某個元素在列表中出現的次數:
>>> x=[[1,2],1,1,[2,1,[1,2]]]
>>> x
[[1, 2], 1, 1, [2, 1, [1, 2]]]
>>> x[0]
[1, 2]
>>> x.count(1)
2
>>> x.count([1,2])
1
>>>
(3)extend
在列表的末尾一次性追加另一個序列中的多個值:
>>> numbers
[1, 3, 5, 1]
>>> numbers2=[6,7,8]
>>> numbers.extend(numbers2)
>>> numbers
[1, 3, 5, 1, 6, 7, 8]
(4)index
從列表中找出某個值第一個匹配項的索引位置:
>>> numbers2
[6, 7, 8]
>>> numbers2.index(7)
1
>>>
(5)insert
將物件插入列表中:
>>> numbers.insert(1,'four')
>>> numbers
[1, 'four', 3, 5, 1, 6, 7, 8]
>>>
(6) pop
移除列表中的一個元素(預設是最後一個),並且返回該元素的值,pop方法是唯一一個既能修改列表又返回元素值(除了None)的列表方法。
>>> numbers
[1, 'four', 3, 5, 1, 6, 7, 8]
>>> numbers.pop()
8
>>> numbers
[1, 'four', 3, 5, 1, 6, 7]
>>> numbers.pop(1)
'four'
>>> numbers
[1, 3, 5, 1, 6, 7]
>>>
使用pop方法可以實現棧,後進先出,入棧和出棧,入棧使用append方法,出棧使用pop方法。
(7) remove
移除列表中某個值的第一個匹配值:
>>> numbers
[1, 3, 5, 1, 6, 7]
>>> numbers.remove(1)
>>> numbers
[3, 5, 1, 6, 7]
>>>
(8) reverse
將列表中的元素反向存放,改變原來的列表值:
>>> numbers
[3, 5, 1, 6, 7]
>>> numbers.reverse()
>>> numbers
[7, 6, 1, 5, 3]
>>>
(9) sort
對列表進行排序,改變原列表,並不返回一個已排序的列表副本,預設是按升序排列:
>>> numbers
[7, 6, 1, 5, 3]
>>> numbers.sort()
>>> numbers
[1, 3, 5, 6, 7]
>>>
既需要一個排好序的列表副本,同時又保留原有列表不變:
>>> numbers=[4,3,5,1,6]
>>> y=numbers[:]
>>> y.sort()
>>> numbers
[4, 3, 5, 1, 6]
>>> y
[1, 3, 4, 5, 6]
>>>
或者使用函式sorted也能達到此效果:
>>> y=sorted(numbers)
>>> numbers
[4, 3, 5, 1, 6]
>>> y
[1, 3, 4, 5, 6]
>>>
sort有兩個可選的引數:key和reverse:
reverse表示降序排列:
>>> numbers=[4,3,5,1,6]
>>> numbers.sort(reverse=True)
>>> numbers
[6, 5, 4, 3, 1]
>>>
key表示按某一鍵值排列:
>>> names=['ddd','aa','bbbb','c']
>>> names.sort(key=len)
>>> names
['c', 'aa', 'ddd', 'bbbb']
>>> names.sort(key=len,reverse=True)
>>> names
['bbbb', 'ddd', 'aa', 'c']
>>>
4 元組
元組是不可變序列,不能修改,用逗號分隔一些值即可建立元組:
>>> 2,3,4
(2, 3, 4)
>>> ()
()
>>> 42,
(42,)
>>> 3*(42)
126
>>> 3*(42,)
(42, 42, 42)
>>>
4.1 將序列轉換成元組
tuple函式將一個序列作為引數轉換為元組:
>>> tuple([42])
(42,)
>>> tuple('hellp')
('h', 'e', 'l', 'l', 'p')
>>>
4.2 元組的操作
元組可作索引取值和分片操作。
>>> y
('h', 'e', 'l', 'l', 'p')
>>> y[0]
'h'
>>> y[2:4]
('l', 'l')
>>>