1. 程式人生 > >Python 語言學習 第三篇:陣列型別(列表、字典和元組)

Python 語言學習 第三篇:陣列型別(列表、字典和元組)

列表和欄位都可以在原處進行修改,可以按照需求增長或縮短,並且可以包含任何型別的物件或被巢狀。列表和字典儲存的是物件的引用,而不是拷貝。

一,列表

列表是有序的序列,每一個列表項的順序是固定的,這使得列表可以通過指定的偏移來索引和分片。列表是可變的序列,支援在原處修改。

列表項可以是任何型別,或物件,也可以巢狀列表。

1,列表的建立

建立一個空的列表:

>>> l=[]

建立一個純數字列表:

>>> l=[1,2,3]

建立一個數字和字元的混合型別列表:

>>> l=[1,2,'a']

建立一個巢狀物件的列表:

>>> l=[1,'a',[2,'b']]
>>> l
[1, 'a', [2, 'b']]

建立一個範圍列表:

range() 函式用於建立一個整數列表,range函式語法:

range(start, stop[, step])

引數說明:

  • start: 計數從 start 開始,預設是從 0 開始。例如range(5)等價於range(0, 5);
  • stop: 計數到 stop 結束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]沒有5
  • step:步長,預設為1。例如:range(0, 5) 等價於 range(0, 5, 1)

使用range函式建立一個範圍列表:

>>> list(range(1,10,2))
[1, 3, 5, 7, 9]

2,列表解析

使用列表解析,可以使用迭代器來生成列表:

>>> l=[x**2 for x in range(0,5)]
>>> l
[0, 1, 4, 9, 16]

3,列表的索引和分片

列表和字串都是有序的序列,它們的索引和分片的格式很相似:

  • l[i]:索引單個列表項
  • l[i][j]:如果列表項是序列,那麼可以使用多重索引
  • l[i:j]:對列表分片

例如:對列表進行索引和分片

>>> l=[1,'a',[2,'b']]
>>> l[1]
'a'
>>> l[2]
[2, 'b']
>>> l[2][1]
'b'
>>> l[0:2]
[1, 'a']

二,列表操作

列表的長度是固定的,不能越界訪問列表,列表的最大索引是列表長度-1,越界會導致Python報錯。

1,追加

向列表的末尾追加一個列表項: list.append(obj)

>>> l.append(4)
[1, 'a', [2, 'b'], 4]

向列表的末尾追加一個序列: list.extend(seq)

>>> l.extend([3,5])
[1, 'a', [2, 'b'], 4, 3, 5]

2,插入

向列表的特定位置插入一個列表項:list.insert(index,obj)

>>> l.insert(2,'b')
[1, 'a', 'b', [2, 'b'], 4, 3, 5]

3,移除列表項

移除列表中的列表項:list.pop(index=-1)

>>> l.pop(2)
'b'
>>> l
[1, 'a', [2, 'b'], 4, 3, 5]

或者使用 del 刪除列表項: del list[i]

>>> del l[5]
[1, 'a', [2, 'b'], 4, 3]

或者使用 list.remove(obj) 從列表中刪除指定的列表項:

>>> l.remove(3)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: list.remove(x): x not in list

4,修改列表項

由於列表是可變的,支援原處修改列表項,也就是說,可以通過索引直接修改列表物件。

>>> l[4]=l[4]+2
>>> l
[1, 'a', [2, 'b'], 4, 5]

5,對列表進行排序:list.sort()

 當列表項具有可比性時,可以對列表進行排序,list.sort(reverse=False),

  • reverse -- 排序規則,reverse = True 降序, reverse = False 升序(預設)。
>>> sl=['a','c','e','d']
>>> sl.sort()
>>> sl
['a', 'c', 'd', 'e']

6,檢視某一元素得索引 list.index(obj)

從列表中找出某個值第一個匹配項的索引位置

>>> l.index(5)
4

7,列表的其他操作

  • 統計列表元素的數量:len(list)
  • 列表的合併:list1+list2,生成新的列表
  • 列表的重複:list*2,等價於 list+list,生成新的列表
  • 列表的迭代: obj in list

+和* 會生成新的列表,而list.append(),list.sort(),list.xxx()等函式和del list[i]是在原處修改,不會生成新的列表。

三,字典

字典是鍵/值對構成的集合,字典通過大括號來建立,字典的鍵是字串,而值可以是任何資料物件。

字典有兩個重要的特徵:

  • 字典是無序的,字典項沒有特定的順序,只能通過鍵來獲取值;
  • 字典是可變的,支援原處修改鍵的值;
  • 字典是作為散列表來實現的,可增長,搜尋非常快速;
  • 和列表一樣,字典儲存的是物件的引用,不是拷貝。

1,建立字典

建立空的字典:

>>> d={}

建立包含兩個專案的字典:

>>> d={'name':'vic','age':28}

建立包含巢狀型別的字典:

>>> d={'student':{'name':'vic','age':28}}

通過dict函式來建立字典:

>>> d=dict(name='vic',age=28)
>>> d
{'name': 'vic', 'age': 28}

2,字典解析

使用字典解析,可以使用迭代器來生成字典:

>>> d={x:x**2 for x in range(0,5)}
>>> d
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

3,引用字典的值

通過鍵來引用字典的值

>>> d['name']
'vic'
>>> d['age']
28

或者使用dict.get(key, default)來獲取鍵對應的值,其中default引數的作用是:當不存在鍵時,返回default作為該鍵的值:

>>> d.get('name')
'vic'
>>> d.get('nam','jim')
'jim'

四,字典操作

字典的基本操作有:

  • len(dict):字典項的數量,或者字典鍵的數量
  • dict.keys():所有字典鍵的集合
  • dict.values():所有字典值得集合
  • dict.items():字典項(鍵/值對)的集合
  • list(dict.keys()):把所有字典鍵轉換為列表
  • list(dict.values()):把所有字典鍵的值轉換為列表
  • d[key],d.get(key):根據字典的鍵獲取值
  • key in dict:檢查該key是否是字典的鍵

1,新增/修改字典項

如果字典中不存在Key,那麼新增該Key/Value對;如果存在該Key,那麼修改該Key的值。

>>> d=dict(name='vic',age=28)
>>> d['sex']='male'
{'name': 'vic', 'age': 28, 'sex': 'male'}
>>>
>>> d['sex']='man'
{'name': 'vic', 'age': 28, 'sex': 'man'}

2,刪除字典項

dict.pop(key) 用於刪除鍵為key的字典項

>>> d.pop('sex')
'man'
>>> d
{'name': 'vic', 'age': 28}

或者使用 del dict[key]來刪除鍵為key的字典項:

>>> del d['sex']

3,合併字典

dict.update(dict2),把字典dict2合併到dict中

>>> d.update({'tel':'120'})
{'name': 'vic', 'age': 28, 'tel': '120'}

4,複製字典

dict.copy()獲得字典的一個深拷貝(deep copy)物件,深拷貝就是增加一個指標並且申請一個新的記憶體,使這個增加的指標指向這個新的記憶體。

dict2=dict:獲得字典的一個淺拷貝(shallow copy)物件,淺拷貝只是增加了一個指標指向已經存在的記憶體。

例如,深拷貝物件和原物件,指向不同的記憶體空間,修改任意一個字典,不會影響另外一個字典:

>>> d=dict(name='vic',age=28)
>>> dc=d.copy()   # deep copy
>>> dc['tel']=120
>>> d
{'name': 'vic', 'age': 28}
>>> dc
{'name': 'vic', 'age': 28, 'tel': 120}

而淺拷貝物件和原物件指向相同的記憶體空間,修改任意一個字典,另一個字典也會修改:

>>> d=dict(name='vic',age=28)
>>> sc=d     # shallow copy
>>> sc['tel']=110
>>> sc
{'name': 'vic', 'age': 28, 'tel': 110}
>>> d
{'name': 'vic', 'age': 28, 'tel': 110}

 

五,元組

元組(tuple)由小括號、逗號和資料物件構成的集合,各個項通過逗號隔開,元組的特點是:

  • 元組項可以是任何資料型別,也可以巢狀
  • 元組是一個位置有序的物件的集合,通過偏移來訪問元組項,
  • 只不過元組是不可變的,不能在原處修改;
  • 元組的各個項可以重複,例如,一個元組可以是:(1, 1, 2, 2, 3)

1,建立元組

建立空的元組,一個空元組就是一個內控的小括號:

>>> t=()

建立包含一個項的元組,t=(1,)是一個元組,t=(1)是一個整數:

>>> t=(1,)
(1,)

建立包含兩個項的元組:

>>> t=(1,'a')

使用tuple()函式建立元組:

>>> t=tuple('a')
>>> t
('a',)

2,索引元組

  • t[i]:索引元組
  • t[i][j]:索引巢狀元組
  • t[i:j]:元組分片

六,元組的基本操作

  • len(t):元組項的數量
  • t1+t2:元組的合併
  • t*2 :元組的重複,相當於t+t
  • x in t:檢查x是否存在於元組t中
  • t.index(obj):元組中第一個項是obj的索引
  • t.count(obj):元組項為obj的數量

 

 

參考文件: