Python之数据结构
目錄
1.通用序列操作
1.1 索引
1.2切片
1.3序列相加
1.4 序列重復(fù)
1.5 成員資格
2.列表
2.1 列表更新
2.2 增加元素
2.3 刪除元素
2.4 查找元素
2.5 隊(duì)列的其他操作
3.元組
3.1 元組定義
3.2 刪除元組
3.3 元組的其他操作
4.字典
4.1 字典定義
4.2使用字典
4.3 字典的其他操作
1.通用序列操作
1.1 索引
序列的每個(gè)元素都分配了一個(gè)數(shù)字,代表了它在序列中的位置。
Python中的索引從“0”開始,第一個(gè)是“0”,第二個(gè)是“1”,以此類推。
x = [1,2,3,4]print(x[0]) print(x[1])執(zhí)行結(jié)果如下:
1 2索引不僅可以從左往右編號(hào),也可以從右往左編號(hào)。
x = [1,2,3,4]print(x[-1]) print(x[-3])執(zhí)行結(jié)果如下:
4 21.2切片
Python中所有的數(shù)據(jù)類型都可以進(jìn)行切片操作。
# 列表 x = [1,2,3,4,5,6]print(x[0:3]) print(x[1:3])# 元組 x2 = (1,2,3,4,5,6)print(x2[0:3]) print(x2[1:3])#字符串 x3 = "123456"print(x3[0:3]) print(x3[1:3])執(zhí)行結(jié)果如下:
[1,2,3] [2,3](1,2,3) (2,3)123 23從結(jié)果可以看出切片操作實(shí)現(xiàn)需要提供兩個(gè)索引作為邊界,第一個(gè)元素包含在切片內(nèi),第二個(gè)元素不包含在內(nèi)。類似于數(shù)學(xué)區(qū)間[a,b)。
同時(shí),切片也支持負(fù)數(shù),即從右往左順序索引獲取切片。
# -*- coding: UTF-8 -*- # 列表 x1 = [1,2,3,4]print (x1[-3:3])# 元組 x2 = (1,2,3,4)print (x2[-3:3])# 字符串 x3 = "1234"print (x3[-3:3])執(zhí)行結(jié)果如下:
[2, 3] (2, 3) 23序列的索引下標(biāo)可以超出其真實(shí)的索引長度。
# -*- coding: UTF-8 -*- # 列表 x1 = [1,2,3,4]print (x1[1:10])# 元組 x2 = (1,2,3,4)print (x2[1:10])# 字符串 x3 = "1234"print (x3[1:10])執(zhí)行結(jié)果如下:
[2, 3, 4] (2, 3, 4) 234所有的索引的切片都有個(gè)默認(rèn)的參數(shù)“a”,“b”?!癮”的默認(rèn)值為0,“b”的默認(rèn)值為最后一個(gè)元素。
# -*- coding: UTF-8 -*- # 列表 x1 = [1,2,3,4]print (x1[3:]) print (x1[:3]) # 元組 x2 = (1,2,3,4)print (x2[3:]) print (x2[:3])# 字符串 x3 = "1234"print (x3[3:]) print (x3[:3])執(zhí)行結(jié)果如下:
[4] [1, 2, 3] (4,) (1, 2, 3) 4 123如果切片的兩個(gè)索引都設(shè)置為空,則獲取整個(gè)序列。
# -*- coding: UTF-8 -*- # 列表 x1 = [1,2,3,4]print (x1[:])# 元組 x2 = (1,2,3,4)print (x2[:])# 字符串 x3 = "1234"print (x3[:])執(zhí)行結(jié)果如下:
[1, 2, 3, 4] (1, 2, 3, 4) 1234根據(jù)起始位置和結(jié)束位置來獲取任意的序列,不過這種序列都是連續(xù)的,也可以獲取非連續(xù)的序列,Python的切片提供了第三個(gè)參數(shù):步長。默認(rèn)情況下為1。如果設(shè)置步長為2,得到的序列是從開始到結(jié)束每隔“1”個(gè)元素的序列。步長的參數(shù)不支持“0”。
# -*- coding: UTF-8 -*- # 列表 x1 = [1,2,3,4,5,6]print (x1[::1]) print (x1[::2]) print (x1[::0])執(zhí)行結(jié)果如下:
[1, 2, 3, 4, 5, 6] [1, 3, 5] Traceback (most recent call last):File "F:/PYthon/test.py", line 8, in <module>print (x1[::0]) ValueError: slice step cannot be zero當(dāng)負(fù)數(shù)作為步長時(shí),Python會(huì)從序列的尾部開始向左獲取元素,直到第一個(gè)元素為止。
# -*- coding: UTF-8 -*- # 列表 x1 = [1,2,3,4,5,6]print (x1[::-1]) print (x1[::-2])執(zhí)行結(jié)果如下:
[6, 5, 4, 3, 2, 1] [6, 4, 2]1.3序列相加
序列之間可以使用“+”進(jìn)行連接操作。
# -*- coding: UTF-8 -*- # 列表 x1 = [1,2,3,4,]+[5,6,7,8] print (x1)執(zhí)行結(jié)果如下:
[1, 2, 3, 4, 5, 6, 7, 8]不同類型的序列不可以做連接。
# -*- coding: UTF-8 -*- # 列表 x1 = [1,2,3,4,]+(5,6,7,8) print (x1)執(zhí)行結(jié)果如下:
TypeError: can only concatenate list (not "tuple") to list1.4 序列重復(fù)
序列之間可以用“*”做乘法。
# -*- coding: UTF-8 -*- # 列表 x1 = [1,2,3,4,] * 3 print (x1)執(zhí)行結(jié)果如下:
[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]1.5 成員資格
成員資格是指判斷一個(gè)元素是否包含在序列中,Python用運(yùn)算符“in”來判斷?!癷n”運(yùn)算符會(huì)判斷左邊的元素是否包含在右邊的序列中,如果包含則返回ture,反之,返回false。
# -*- coding: UTF-8 -*- # 列表 x1 = [1,2,3,4,5]print (3 in x1) print (9 in x1)執(zhí)行結(jié)果如下:
True False注意:只有當(dāng)元素的類型和值都完全一致,才算包含在序列中,比如數(shù)字5和字符串“5”就是兩種不同的元素。
# -*- coding: UTF-8 -*-print (5 in "123456")執(zhí)行結(jié)果如下:
TypeError: 'in <string>' requires string as left operand, not intPython解釋器要求如果“in”操作符右邊是字符串,那么左邊也必須是字符串。
1.6 長度,最小值,最大值和求和。
#! /usr/bin/env python3 # -*- coding: utf-8 -*-# 列表 x1 = [1,2,3,4,5,6]print ("列表長度",len(x1)) print ("列表最小值",min(x1)) print ("列表最大值",max(x1)) print ("列表元素和",sum(x1))#元組 x2 = (1,2,3,4,5,6) print ("列表長度",len(x2)) print ("列表最小值",min(x2)) print ("列表最大值",max(x2)) print ("列表元素和",sum(x2))#字符串 x3 = "123456" print ("列表長度",len(x3)) print ("列表最小值",min(x3)) print ("列表最大值",max(x3)) print ("列表元素和",sum(x3))執(zhí)行結(jié)果如下:
Traceback (most recent call last):File "F:/PYthon/test.py", line 24, in <module>print ("列表元素和",sum(x3)) TypeError: unsupported operand type(s) for +: 'int' and 'str'列表長度 6 列表最小值 1 列表最大值 6 列表元素和 21列表長度 6 列表最小值 1 列表最大值 6 列表元素和 21列表長度 6 列表最小值 1 列表最大值 6注意:sum函數(shù)求和要求的是序列的元素必須都是"int",由于字符串序列的元素都是字符串,所以sum函數(shù)無法對字符串序列求和。
2.列表
2.1 列表更新
列表可以通過索引獲取其中的單個(gè)元素,也可以通過索引更新其中的元素,使用方法就和變量賦值一樣。
# -*- coding: utf-8 -*-x = [1,2,3,4,5,6]x[0]=2print (x)執(zhí)行結(jié)果如下:
[2, 2, 3, 4, 5, 6]更新的索引必須是已經(jīng)存在的索引,不能超出列表長度。
# -*- coding: utf-8 -*-x = [1,2,3,4,5,6]x[10]=2print (x)執(zhí)行結(jié)果如下:
IndexError: list assignment index out of rangePython解釋器會(huì)提示我們索引超出列表范圍。
2.2 增加元素
列表不能通過索引來添加元素,索引只能修改現(xiàn)有的元素,使用append方法在列表最后添加新元素,append每次只能夠增加一個(gè)元素,想要增加多個(gè)元素,使用extend方法。
# -*- coding: utf-8 -*-x = [1,2,3,4,5,6]x.append(7) print (x)x.extend([8,9]) print (x)執(zhí)行結(jié)果如下:
[1, 2, 3, 4, 5, 6, 7] [1, 2, 3, 4, 5, 6, 7, 8, 9]append和extend都只能在列表最后添加元素。
insert方法可以在中間插入元素。一次只能夠插入一個(gè)元素。(也可以在最后添加元素)
# -*- coding: utf-8 -*-x = [1,2,3,4,5,6]x.insert(2,3)print (x)執(zhí)行結(jié)果如下:
[1, 2, 3, 3, 4, 5, 6]insert方法需要兩個(gè)參數(shù),第一個(gè)參數(shù)表示要插入元素的位置,第二個(gè)表示的是要插入元素的值。
2.3 刪除元素
1.pop函數(shù)可以刪除列表的一個(gè)元素,默認(rèn)是最后一個(gè),也可以指定位置。
# -*- coding: utf-8 -*-x = [1,2,3,4,5,6]#默認(rèn)位置 x.pop() print (x)#指定位置 x.pop(1) print (x)執(zhí)行結(jié)果如下:
[1, 2, 3, 4, 5] [1, 3, 4, 5]2.remove函數(shù)可以根據(jù)內(nèi)容來刪除元素。
remove函數(shù)會(huì)刪除查找到的第一個(gè)元素,并且沒有返回值。
# -*- coding: utf-8 -*-x = [1,2,3,4,4,6]x.remove (4) print (x)執(zhí)行結(jié)果如下:
[1, 2, 3, 4, 6]3.del也可以用來刪除列表元素。
del后邊指定的是列表的元素和索引。
# -*- coding: utf-8 -*-x = ["A","B","C","D","E","F","G"]del x[2] print (x)執(zhí)行結(jié)果如下:
['A', 'B', 'D', 'E', 'F', 'G']2.4 查找元素
index方法用于查找元素在列表中的索引位置。如果查找的元素不在列表,就會(huì)報(bào)錯(cuò)。
# -*- coding: utf-8 -*-x = ["A","B","C","D","E","F","G"]#元素在列表中 print (x.index("A"))#元素不在列表中 print (x.index("H"))執(zhí)行結(jié)果如下:
ValueError: 'H' is not in list 02.5 隊(duì)列的其他操作
1.reverse方法可以反轉(zhuǎn)隊(duì)形。
和[::-1]類似,但是reverse方法修改的是原來的隊(duì)列,并且沒有返回值。
# -*- coding: utf-8 -*-x = ["A","B","C","D","E","F","G"]x.reverse()print (x)執(zhí)行結(jié)果如下:
['G', 'F', 'E', 'D', 'C', 'B', 'A']2.count方法用來統(tǒng)計(jì)列表中一個(gè)元素出現(xiàn)的次數(shù)。
# -*- coding: utf-8 -*-x = [1,2,1,5,2,6,5,5,2,6,6,5,5,2,3,6]x.count(5)print (x.count(5))執(zhí)行結(jié)果如下:
53.sort方法用于對列表進(jìn)行排序。
# -*- coding: utf-8 -*-x = [1,2,1,5,2,6,5,5,2,6,6,5,5,2,3,6]x.sort()print (x)執(zhí)行結(jié)果如下:
[1, 1, 2, 2, 2, 2, 3, 5, 5, 5, 5, 5, 6, 6, 6, 6]3.元組
3.1 元組定義
定義元組時(shí)只需要用()把元素括起來,每個(gè)元素中間用“,”隔開。
如果只有一個(gè)元素,后邊必須帶“,”。否則,不能夠定義為元組。
# -*- coding: utf-8 -*-x = (1,2,3,4,5) print (x) print (type(x))#不帶“,” y = (1) print (y) print (type(y))#帶“,” z = (1,) print (z) print (type(z))執(zhí)行結(jié)果如下:
(1, 2, 3, 4, 5) <type 'tuple'> 1 <type 'int'> (1,) <type 'tuple'>3.2 刪除元組
元組不能夠修改,也不能單獨(dú)的刪除元組的某個(gè)元素,只能刪除整個(gè)元組。
# -*- coding: utf-8 -*-x = (1,2,3,4,5)del x print (x)執(zhí)行結(jié)果如下:
NameError: name 'x' is not defined這個(gè)提示說明變量“x”沒有被定義,而我們成功刪除了元組x。
3.3 元組的其他操作
1.count方法和列表一樣,可以統(tǒng)計(jì)某個(gè)元素在一個(gè)元組中出現(xiàn)的次數(shù)。
# -*- coding: utf-8 -*-x = (1,2,3,4,5,5,4,1,4,5,2,3,6,8)print (x.count(2))執(zhí)行結(jié)果如下:
22.index方法跟列表中的一樣,可以查找某個(gè)元素在元組中的索引位置。
# -*- coding: utf-8 -*-x = (1,2,3,4,5)print (x.index(3))執(zhí)行結(jié)果如下:
24.字典
4.1 字典定義
字典類型和它的名字一樣,可以像查字典一樣去查找。其他語言也有類似的類型,如PHP的Array,Java中的HashMap。
# -*- coding: utf-8 -*-zd = {"I":"我","YOU":"你","HE":"他","SHE":"她", }print (zd,type(zd))執(zhí)行結(jié)果如下:
{"I": "我", "YOU": "你", "HE": "他", "SHE": "她"}字典的元素都是成對出現(xiàn)的,(","的左邊成為鍵,右邊成為值),元素和元素之間由“,”構(gòu)成。字典的鍵必須是唯一的,如果是空字典,可以直接使用{}。
4.2使用字典
在Python中,字典其實(shí)就是一組鍵值對。字典和列表都是可修改結(jié)構(gòu),對字典的修改和列表類似。
# -*- coding: utf-8 -*- zd = {"I": "我","YOU": "你","HE": "他","SHE": "她", } zd["HE"] = "他們" print (zd)執(zhí)行結(jié)果如下:
{"I": "我", "YOU": "你", "HE": "他們", "SHE": "她"}刪除字典中的元素
# -*- coding: utf-8 -*- zd = {"I": "我","YOU": "你","HE": "他","SHE": "她", }del zd["HE"] print (zd)執(zhí)行結(jié)果如下:
{"I": "我", "YOU": "你", "SHE": "她"}4.3 字典的其他操作
1.clear可以用于清空字典的所有元素。
# -*- coding: utf-8 -*- zd = {"I": "我","YOU": "你","HE": "他","SHE": "她", }zd.clear() print (zd)執(zhí)行結(jié)果如下:
{}2.使用copy方法完整的復(fù)制了新的副本。
# -*- coding: utf-8 -*- zd1 = {"I": "我","YOU": "你","HE": "他","SHE": "她", }zd2 = zd1.copy() print (zd1)del zd2["SHE"] print (zd2)執(zhí)行結(jié)果如下:
{'I': '我', 'YOU': '你', 'HE': '他們', 'SHE': '她'} {'I': '我', 'YOU': '你', 'HE': '他們'}使用copy對獲取到的字典做修改,原字典不受影響。
3.fromkeys方法用于創(chuàng)建一個(gè)新字典,用序列中的元素作為鍵,第二個(gè)參數(shù)為字典所有參數(shù)對應(yīng)的初始值。
# -*- coding: utf-8 -*- seq =("red","black","blue")#不指定默認(rèn)值 color1 = dict.fromkeys(seq) print (color1)#指定默認(rèn)值 color2 = dict.fromkeys(seq,6) print (color2) {'red': None,'black': None,'blue': None} {'red': 6,'black': 6,'blue': 6}4.使用get方法返回鍵對應(yīng)的值,如果字典不存在對應(yīng)的鍵值則返回默認(rèn)值。
# -*- coding: utf-8 -*- zd1 = {"I": "我","YOU": "你","HE": "他","SHE": "她", }print (zd1.get("HE"))print (zd1.get("IT"))print (zd1.get("IT","未知"))執(zhí)行結(jié)果如下:
HE : 他 IT : None IT : 未知5.使用keys方法返回一個(gè)列表,里面包含了字典的所有鍵。
# -*- coding: utf-8 -*- zd1 = {"I": "我","YOU": "你","HE": "他","SHE": "她", }print(zd1.keys())執(zhí)行結(jié)果如下:
dict_keys(['I', 'YOU', 'HE', 'SHE'])6.使用values方法返回一個(gè)列表,里邊包含了字典的所有值。
# -*- coding: utf-8 -*- zd1 = {"I": "我","YOU": "你","HE": "他","SHE": "她", }print(zd1.values())執(zhí)行結(jié)果如下:
dict_values(['我', '你', '他', '她'])7.使用items方法返回一個(gè)列表,里邊包含了所有鍵的列表和所有值的列表。
# -*- coding: utf-8 -*- zd1 = {"I": "我","YOU": "你","HE": "他","SHE": "她", }print(zd1.items())執(zhí)行結(jié)果如下:
dict_items([('I': '我'), ('YOU': '你'),('HE': '他'),('SHE': '她')])由于字典不能直接應(yīng)用于for循環(huán),可以使用items方法來遍歷字典。
# -*- coding: utf-8 -*- zd1 = {"I": "我","YOU": "你","HE": "他","SHE": "她", }for k ,v in zd1.items():print(k, "=>",v)執(zhí)行結(jié)果如下:
I => 我 YOU => 你 HE => 他 SHE => 她總結(jié)
以上是生活随笔為你收集整理的Python之数据结构的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用 Pytesseract 进行光学字
- 下一篇: spring boot 全局统一日志打印