Python數據結構之列表元組字典的用法
阿新 • • 發佈:2018-08-16
初始 pri 了解 介紹 根據 拉德 keys () l命令 數據結構的含義
在學習數據結構之前,我們先來了解下數據結構的含義。數據結構是通過某種方式(例如對元素進行編號)組織在一起的數據元素的集合,這些數據元素可以是數字或者字符,甚至可以是其他數據結構。在Python語言中,最基本的數據結構是序列(sequence)。序列中的每個元素被分配一個序號————即元素的位置,稱為索引或下標,索引從0開始遞增。
典型的序列包括列表、元組和字符串。其中,列表是可變的(可修改),而元組和字符串是不可變的(一旦創建了就是固定的)。列表、元組和字符串也是較常用的數據結構。
本篇內容主要講解Python的列表、元組、字典,下篇將會介紹字符串的操作。
列表 list,使用 [] 定義,[] 中的各個元素,用逗號分隔。
例子
- 定義一個名為 all_star,包含 Kobe,TMAC,LBJ元素的列表
>>> all_star = ["Kobe","TMAC","LBJ"] >>> print(all_star) [‘Kobe‘, ‘TMAC‘, ‘LBJ‘]
- 列表也可以包含列表,例如:
>>> east_star = ["Irving","Wall","Love"] >>> west_star = ["Curry","KD","Harden"] >>> all_star = [west_star,east_star] >>> print(all_star) [[‘Curry‘, ‘KD‘, ‘Harden‘], [‘Irving‘, ‘Wall‘, ‘Love‘]]
- 或者
>>> all_star = [["Kobe","TMAC"],["LBJ","BOSH"]] >>> print(all_star) [[‘Kobe‘, ‘TMAC‘], [‘LBJ‘, ‘BOSH‘]]
列表支持增刪改查
所有序列類型都可以進行某些特定操作,由對象屬性決定。這些操作包括:索引(indexing)、切片(sliceing)、加(adding)、乘(multiplying)以及檢查某些元素是否屬於序列成員、計算序列長度、找出最大、最小元素的內置函數。
查,使用單個索引一次能取出一個元素,使用切片,可以取出指定範圍內的元素,分片通過兩個冒號相隔的兩個索引值實現。
- 例子1,單個索引獲取元素,獲取all_star列表中名叫Kobe的元素
>>> all_star = ["Kobe","TMAC","LBJ"] #元素的下標也就是索引,從0開始,逐個遞增。Kobe的元素下標為0,TMAC為1,LBJ為2 >>> print(all_star[0]) Kobe >>> all_star = [["Kobe","TMAC"],["LBJ","BOSH"]] >>> print(all_star[0][0]) Kobe
- 例子2,切片的使用
>>> all_star = [‘Curry‘, ‘KD‘, ‘Harden‘,‘Irving‘, ‘Wall‘, ‘Love‘] #索引範圍,左側包含,右側不包含,當想取前3個元素的話,切片範圍為0:3. >>> all_star[0:3] [‘Curry‘, ‘KD‘, ‘Harden‘]
#從第一個元素,取到最後一個元素 >>> all_star[1:] [‘KD‘, ‘Harden‘, ‘Irving‘, ‘Wall‘, ‘Love‘]
#忽略第一個和最後一個元素 >>> all_star[1:-1] [‘KD‘, ‘Harden‘, ‘Irving‘, ‘Wall‘]
#從第二個元素開始,每隔一個取一個,2表示步長,默認步長為1. >>> all_star[1:-1:2] [‘KD‘, ‘Irving‘]
#在下標為2的位置,從右向左取值,直到最後一個值。 >>> all_star[2::-1] [‘Harden‘, ‘KD‘, ‘Curry‘]
增,append(),insert()
- 例子:
>>> all_star [‘Curry‘, ‘KD‘, ‘Harden‘, ‘Irving‘, ‘Wall‘, ‘Love‘] #把元素添加到最後 >>> all_star.append("LBJ") >>> all_star [‘Curry‘, ‘KD‘, ‘Harden‘, ‘Irving‘, ‘Wall‘, ‘Love‘, ‘LBJ‘]
#把元素插入到指定位置 >>> all_star.insert(2,"Westbrook") >>> all_star [‘Curry‘, ‘KD‘, ‘Westbrook‘, ‘Harden‘, ‘Irving‘, ‘Wall‘, ‘Love‘, ‘LBJ‘]
改,采用直接替換的方式
- 例子:
>>> all_star [‘Curry‘, ‘KD‘, ‘Westbrook‘, ‘Harden‘, ‘Irving‘, ‘Wall‘, ‘Love‘, ‘LBJ‘] #為需要替換的元素下標賦予新值 >>> all_star[6]="George" >>> all_star [‘Curry‘, ‘KD‘, ‘Westbrook‘, ‘Harden‘, ‘Irving‘, ‘Wall‘, ‘George‘, ‘LBJ‘]
刪,remove()、pop()、del
- 例子:
#remove()方法直接刪除內容 >>> all_star.remove("LBJ") >>> all_star [‘Curry‘, ‘KD‘, ‘Westbrook‘, ‘Harden‘, ‘Irving‘, ‘Wall‘, ‘George‘]
#pop()方法根據索引值刪除內容,並返回刪除的值 >>> all_star.pop(6) ‘George‘ >>> all_star [‘Curry‘, ‘KD‘, ‘Westbrook‘, ‘Harden‘, ‘Irving‘, ‘Wall‘]
#del命令根據索引值刪除內容,沒有返回 >>> del all_star[5] >>> all_star [‘Curry‘, ‘KD‘, ‘Westbrook‘, ‘Harden‘, ‘Irving‘]
#del命令刪除列表對象 >>> del all_star >>> all_star Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name ‘all_star‘ is not defined
一些內置函數:
- count() 統計元素出現的次數
>>> list1 = [1,2,3,4,5,4,3,2,1,1,0,1] >>> list1.count(1) 4
- extend() 在列表末尾一次性追加另一個序列中的多個值,有擴展列表的功能。
>>> list1 = [1,2,3] >>> list2 = [4,5,6] >>> list1.extend(list2) >>> list1 [1, 2, 3, 4, 5, 6]
- index() 獲取索引值,當我們知道一個序列的值而不知道期下標是多少,可以使用index函數
>>> list1 [1, 2, 3, 4, 5, 6] >>> list1.index(4) 3
- reverse() 調轉序列順序
>>> list1 = [1,2,3,4,5,6] >>> list1.reverse() >>> print(list1) [6, 5, 4, 3, 2, 1]
- sort() 排序
>>> list1 = [1,9,3,7,2,6,0] >>> list1.sort() >>> list1 [0, 1, 2, 3, 6, 7, 9] >>> list1.sort(reverse=True) >>> list1 [9, 7, 6, 3, 2, 1, 0]
- len() 獲取序列長度
>>> len(list1) 7
- max() 獲取序列的最大值
>>> max(list1) 9
- min() 獲取元素的最小值
>>> min(list1) 0
- list() 適用於所有類型的序列。字符串不能像列表一樣被修改,所以有時根據字符串創建列表會很有用
>>> h = list("hello") >>> h [‘h‘, ‘e‘, ‘l‘, ‘l‘, ‘o‘]
- join() 可以將一個由字符串組成的列表轉換為字符串
>>> ‘‘.join(h) ‘hello‘
元組 Tuple,只讀列表
元組使用 () 定義,()中的元素使用逗號隔開。元組也可以通過索引和切片獲取元素的值,方法和列表一樣。
字典 Dictionary
字典是Python中唯一的映射類型,采用鍵值對的形式無序存儲數據,鍵不可修改,且唯一;值可以修改。
創建方法:使用 {} 定義字典
>>> dic = {‘name‘:‘wt‘}
>>> dic=dict(([‘name‘,‘wt‘],[‘a‘,‘b‘],))
對字典的值進行初始化:
>>> all_star = dict.fromkeys([‘work‘,‘hobby‘],‘basketball‘)
>>> print(all_star)
{‘work‘: ‘basketball‘, ‘hobby‘: ‘basketball‘}
字典也支持增刪改查
增
- 例子
>>> dic1 = {‘name‘:‘wt‘} >>> dic1[‘age‘] = 21 >>> dic1 {‘name‘: ‘wt‘, ‘age‘: 21}
改:這裏介紹3種改的方式
- 例子
>>> dic1 {‘name‘: ‘wt‘, ‘age‘: 21} #直接對鍵進行賦值,有則修改,沒有就會創建 >>> dic1[‘name‘] = ‘Kobe‘ >>> dic1 {‘name‘: ‘Kobe‘, ‘age‘: 21}
#使用內置的setdefault方法,如果鍵存在,不改動,返回字典中該鍵對應的值;如果不存在,增加新的鍵值對,並返回新增鍵值對值 >>> dic1.setdefault(‘age‘,22) 21 >>> dic1 {‘name‘: ‘Kobe‘, ‘age‘: 21}
#update方法,當dic1字典中有就更新,沒有則將dic2字典中的鍵值對添加到dic1中 >>> dic1 = {‘name‘:‘Kobe‘,‘age‘:21} >>> dic2 = {‘name‘:‘TMAC‘,‘hobby‘:‘basketball‘} >>> dic1.update(dic2) >>> dic1 {‘name‘: ‘TMAC‘, ‘age‘: 21, ‘hobby‘: ‘basketball‘}
查:
- 例子
>>> dic1 = {‘name‘: ‘TMAC‘, ‘age‘: 21, ‘hobby‘: ‘basketball‘} #獲取指定鍵的值 >>> dic1[‘name‘] ‘TMAC‘
#通過keys方法獲取字典包含的鍵 >>> dic1.keys() dict_keys([‘name‘, ‘age‘, ‘hobby‘])
#通過values()方法獲取字典的值 >>> dic1.values() dict_values([‘TMAC‘, 21, ‘basketball‘])
#通過items()方法獲取字典的所有鍵值對 >>> dic1.items() dict_items([(‘name‘, ‘TMAC‘), (‘age‘, 21), (‘hobby‘, ‘basketball‘)])
刪:
- 例子
>>> dic1 {‘name‘: ‘TMAC‘, ‘age‘: 21, ‘hobby‘: ‘basketball‘} #使用del命令刪除指定鍵的值 >>> del dic1[‘hobby‘] >>> dic1 {‘name‘: ‘TMAC‘, ‘age‘: 21}
#clear()方法清空字典 >>> dic1.clear() >>> dic1 {}
#pop()方法刪除指定鍵的值,並返回該值 >>> dic1 = {‘name‘:‘Kobe‘,‘age‘:21} >>> dic1.pop(‘name‘) ‘Kobe‘ >>> dic1 {‘age‘: 21}
#popitem()方法隨機刪除鍵值對,並返回刪除的鍵值對 >>> dic1 = {‘name‘:‘Kobe‘,‘age‘:21} >>> dic1.popitem() (‘age‘, 21)
字典嵌套:字典裏可以包含字典、列表等。
books = { "日本作家" : { "村上春樹":["且聽風吟","沒有女人的男人們","1Q84","多崎作"], "井上靖":["敦煌"], "東野圭吾":["白夜行","解憂雜貨鋪","放學後"] }, "歐美作家" : { "昆德拉":["慶祝無意義","不能承受生命之輕"], "菲茨傑拉德":["了不起的蓋茨比"] }, "中國作家" : { "路遙":["平凡的世界","人生"], "金庸":["天龍八部","射雕英雄傳","笑傲江湖"] } } >>> print(books[‘日本作家‘][‘村上春樹‘][1]) 沒有女人的男人們
字典的排序:字典默認根據鍵排序,列表根據值排序
>>> dic1 = {24:‘Kobe‘,1:‘TMAC‘,30:‘Curry‘,23:‘LBJ‘} >>> dic1 {24: ‘Kobe‘, 1: ‘TMAC‘, 30: ‘Curry‘, 23: ‘LBJ‘} #字典默認按鍵排序 >>> print(sorted(dic1.items())) [(1, ‘TMAC‘), (23, ‘LBJ‘), (24, ‘Kobe‘), (30, ‘Curry‘)]
#按值排序 >>> print(sorted(dic1.values())) [‘Curry‘, ‘Kobe‘, ‘LBJ‘, ‘TMAC‘]
使用for循環,打印字典的鍵值
#打印鍵 >>> for i in dic1: ... print(i) ... 24 1 30 23
#打印鍵值 >>> for i in dic1: ... print(i,dic1[i]) ... 24 Kobe 1 TMAC 30 Curry 23 LBJ
Python數據結構之列表元組字典的用法