欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python從入門到實戰(zhàn)之數(shù)據(jù)結構篇

 更新時間:2021年11月04日 15:12:56   作者:嗨!程序媛  
數(shù)據(jù)結構中有很多樹的結構,其中包括二叉樹、二叉搜索樹、2-3樹、紅黑樹等等。本文中對數(shù)據(jù)結構進行了總結,不求嚴格精準,但求簡單易懂

前言

我是栗子——專為小白準備《Python從入門到實戰(zhàn)》內容。

這不是上一期剛講完循環(huán)判斷,還給大家出了很多新手的題目,邊學邊練習才有效果嘛。

時隔幾天,大家都吼完了叭~實在沒寫完的慢慢復習,我更新文章也挺慢的!哈哈哈哈

今天想一想:要學數(shù)據(jù)結構啦~

一、Python有那幾種數(shù)據(jù)結構?

Python 有四種數(shù)據(jù)結構,分別是:列表、字典、元組,集合。每種數(shù)據(jù)結構都有自己的特點,并且都有著獨到的用處。為了避免過早地陷入細枝末節(jié)。

我們先從整體上來認識一下這四種數(shù)據(jù)結構:從最容易識別的特征上來說,列表中的元素使用方括號擴起來,字典和集合是花括號,而元組則是圓括號。其中字典中的元素是均帶有 ‘:' 的 key 與 value 的對應關系組。

1)列表(list)

1.1 什么是列表?

最顯著的特征是:

  • 列表中的每一個元素都是可變的;
  • 列表中的元素是有序的,也就是說每一個元素都有一個位置;
  • 列表可以容納 Python 中的任何對象。

列表中的元素是可變的,這意味著我們可以在列表中添加、刪除和修改元素。

輸入:

Weekday = ['Monday','Tuesday','Wednesday','Thursday','Friday']
print(Weekday[0])

第三個特征是列表可以裝入 Python 中所有的對象,往下看:

all_in_list = [
    1,                              #整數(shù)
    1.0,                            #浮點數(shù)
    'a word',                       #字符串
    print(1),                       #函數(shù)
    True,                           #布爾值
    [1,2],                          #列表中套列表
    (1,2),                          #元組
    {'key':'value'}                 #字典
]

1.2列表的增刪改查

對于數(shù)據(jù)的操作,最常見的是增刪改查這四類。從列表的插入方法開始,輸入:

fruit = ['pineapple','pear']
fruit.insert(1,'grape')
print(fruit)

在使用 insert 方法的時候,必須指定在列表中要插入新的元素的位置,插入元素的實際位置是在指定位置元素之前的位置,如果指定插入的位置在列表中不存在,實際上也就是超出指定列表長度,那么這個元素一定會被放在列表的最后位置。

  • 其他方法達到“插入”的效果:
fruit[0:0] = ['Orange']
print(fruit)
  • 刪除列表中元素的方法是使用 remove():
fruit = ['pinapple','pear','grape']
fruit.remove('grape')
print(fruit)
  • 替換修改其中的元素:
fruit[0] = 'Grapefruit'
  • 刪除還有一種方法,那就是使用 del 關鍵字來聲明:
del fruit[0:2]
print(fruit)

2)字典(Dictionary)

2.1 什么是字典?

字典這種數(shù)據(jù)結構的特征也正如現(xiàn)實世界中的字典一樣,使用名稱-內容進行數(shù)據(jù)的構建,在 Python 中分別對應著鍵(key)-值(value),習慣上稱之為鍵值對。

字典的特征總結如下:

  • 字典中數(shù)據(jù)必須是以鍵值對的形式出現(xiàn)的;
  • 邏輯上講,鍵是不能重復的,而值可以重復;
  • 字典中的鍵(key)是不可變的,也就是無法修改的;而值(value)是可變的,可修改的,可以是任何對象。

舉個小栗子:

這是字典的書寫方式:
 
NASDAQ_code = {
    'BIDU':'Baidu',
    'SINA':'Sina',
    'YOKU':'Youku'
}

一個字典中鍵與值并不能脫離對方而存在,如果你寫成 {'BIDU':} 會引發(fā)語法錯誤。

記住這兩個特征: key 和 value 是一一對應的,key 是不可變的。

同時字典中的鍵值不會有重復,即便你這么做,相同的鍵值也只能出現(xiàn)一次:

a = {'key':123,'key':123}
print(a)

2.2 字典的增刪改查

首先我們按照映射關系創(chuàng)建一個字典:

NASDAQ_code = {'BIDU':'Baidu','SINA':'Sina'}

與列表不同的是,字典并沒有一個可以往里面添加單一元素的“方法”,但是我們可以通過這種方式進行添加:

NASDAQ_code['YOKU'] = 'Youku'
print(NASDAQ_code)

列表中有用來添加多個元素的方法 extend() ,在字典中也有對應的添加多個元素的方法 update()

NASDAQ_code.update({'FB':'Facebook','TSLA':'Tesla'})

刪除字典中的元素則使用 del 方法:

del NASDAQ_code['FB']

需要注意的是,雖說字典是使用的花括號,在索引內容的時候仍舊使用的是和列表一樣的方括號進行索引,只不過在括號中放入的一定是——字典中的鍵,也就是說需要通過鍵來索引值:

NASDAQ_code['TSLA']

同時,字典是不能夠切片的,也就是說下面這樣的寫法應用在字典上是錯誤的:

chart[1:4]  # WRONG!

3)元組(Tuple)

元組其實可以理解成一個穩(wěn)固版的列表,因為元組是不可修改的,因此在列表中的存在的方法均不可以使用在元組上,但是元組是可以被查看索引的,方式就和列表一樣:

letters = ('a','b','c','d','e','f','g')
letter[0]

4)集合(Set)

4.1什么是集合?

每一個集合中的元素是無序的、不重復的任意對象,我們可以通過集合去判斷數(shù)據(jù)的從屬關系,有時還可以通過集合把數(shù)據(jù)結構中重復的元素減掉。

集合不能被切片也不能被索引,除了做集合運算之外,集合元素可以被添加還有刪除:

a_set = {1,2,3,4}                                              
a_set.add(5)
a_set.discard(5)

5)番外——數(shù)據(jù)結構的一些技巧

5.1多重循環(huán)

舉個栗子:比如,在整理表格或者文件的時候會按照字母或者日期進行排序,在 Python 中也存在類似的功能。

num_list = [6,2,7,4,1,3,5]
print(sorted(num_list))

sorted 函數(shù)按照長短、大小、英文字母的順序給每個列表中的元素進行排序。這個函數(shù)會經(jīng)常在數(shù)據(jù)的展示中使用,其中有一個非常重要的地方,sorted 函數(shù)并不會改變列表本身,你可以把它理解成是先將列表進行復制,然后再進行順序的整理。

在使用默認參數(shù) reverse 后列表可以被按照逆序整理:

sorted(num_list,reverse=True)

在整理列表的過程中,如果同時需要兩個列表應該怎么辦?這時候就可以用到 zip 函數(shù),比如:

for a,b in zip(num,str):
    print(b,'is',a)

5.2推導式

數(shù)據(jù)結構中的推導式,也許你還看到過它的另一種名稱叫做列表的解析式。

現(xiàn)在我有10個元素要裝進列表中,普通的寫法是這樣的:

a = []
for i in range(1,11):
    a.append(i)

下面換成列表解析的方式來寫:

b = [i for i in range(1,11)]

列表解析式不僅非常方便,并且在執(zhí)行效率上要遠遠勝過前者,我們把兩種不同的列表操作方式所耗費的時間進行對比,就不難發(fā)現(xiàn)其效率的巨大差異:

import time
 
a = []
t0 = time.clock()
for i in range(1,20000):
    a.append(i)
print(time.clock() - t0, seconds process time")
t0 = time.clock()
b = [i for i in range(1,20000)]
print(time.clock() - t0, seconds process time")

得到結果:

8.999999999998592e-06 seconds process time
0.0012320000000000005 seconds process time

列表推導式的用法也很好理解,可以簡單地看成兩部分。紅色虛線后面的是我們熟悉的 for 循環(huán)的表達式,而虛線前面的可以認為是我們想要放在列表中的元素,在這個例子中放在列表中的元素即是后面循環(huán)的元素本身。

5.3循環(huán)列表時獲取元素的索引

現(xiàn)在我們有一個字母表,如何能像圖中一樣,在索引的時候得到每個元素的具體位置的展示呢?

letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
a is 1
b is 2
c is 3
d is 4
e is 5
f is 6 
g is 7

前面提到過,列表是有序的,這時候我們可以使用 Python 中獨有的函數(shù) enumerate 來進行:

letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
for num,letter in enumerate(letters):
    print(letter,'is',num + 1)

結尾

你學廢了嘛?等過幾天你學廢了,記得評論吱一聲,到時候我再更新~哈哈哈

快來跟我一起學習吧!關注小編,每天更新精彩內容哦~

到此這篇關于Python從入門到實戰(zhàn)之數(shù)據(jù)結構篇的文章就介紹到這了,更多相關Python 數(shù)據(jù)結構內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • python之multimethod包多分派解讀

    python之multimethod包多分派解讀

    這篇文章主要介紹了python之multimethod包多分派問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 基于python實現(xiàn)上傳文件到OSS代碼實例

    基于python實現(xiàn)上傳文件到OSS代碼實例

    這篇文章主要介紹了基于python實現(xiàn)上傳文件到OSS,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05
  • Matplotlib繪圖基礎之3D圖形繪制詳解

    Matplotlib繪圖基礎之3D圖形繪制詳解

    matplotlib 在1.0版本之前其實是不支持3D圖形繪制的,后來的版本中,matplotlib加入了3D圖形的支持,擴展了其展示數(shù)據(jù)分布和關系的能力,下面就和大家介紹一下matplotlib中繪制各類3D圖形的方法
    2023-08-08
  • 詳解Python模塊化--模塊(Modules)和包(Packages)

    詳解Python模塊化--模塊(Modules)和包(Packages)

    這篇文章主要介紹了使用Python的模塊(Modules)和包(Packages),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-08-08
  • python使用Psutil模塊實現(xiàn)獲取計算機相關信息

    python使用Psutil模塊實現(xiàn)獲取計算機相關信息

    psutil 是一個跨平臺的庫,用于獲取進程和系統(tǒng)運行狀態(tài)的信息,這篇文章主要為大家詳細介紹了python如何調用psutil模塊實現(xiàn)獲取計算機相關信息,有需要的小伙伴可以了解下
    2023-11-11
  • 在python 中實現(xiàn)運行多條shell命令

    在python 中實現(xiàn)運行多條shell命令

    今天小編就為大家分享一篇在python 中實現(xiàn)運行多條shell命令,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • 圖文詳解梯度下降算法的原理及Python實現(xiàn)

    圖文詳解梯度下降算法的原理及Python實現(xiàn)

    梯度下降是迭代法的一種,可以用于求解最小二乘問題(線性和非線性都可以)。本文將通過圖文詳解梯度下降算法的原理及實現(xiàn),需要的可以參考一下
    2022-08-08
  • Flask Web開發(fā)入門之文件上傳(八)

    Flask Web開發(fā)入門之文件上傳(八)

    這篇文章主要為大家詳細介紹了Flask Web開發(fā)入門之文件上傳的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • 一篇文章弄懂Python中的可迭代對象、迭代器和生成器

    一篇文章弄懂Python中的可迭代對象、迭代器和生成器

    這篇文章主要給大家介紹了關于Python中可迭代對象、迭代器和生成器的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Python具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-08-08
  • Python設計模式之代理模式實例詳解

    Python設計模式之代理模式實例詳解

    這篇文章主要介紹了Python設計模式之代理模式,結合實例形式較為詳細的分析了代理模式的概念、原理及Python定義、使用代理模式相關操作技巧,需要的朋友可以參考下
    2019-01-01

最新評論