Python學(xué)習(xí)教程(Python學(xué)習(xí)路線):數(shù)據(jù)結(jié)構(gòu)精講

Python學(xué)習(xí)教程(Python學(xué)習(xí)路線):數(shù)據(jù)結(jié)構(gòu)精講

前言

數(shù)據(jù)結(jié)構(gòu)是組織數(shù)據(jù)的方式掀抹,以便能夠更好的存儲(chǔ)和獲取數(shù)據(jù)虐拓。數(shù)據(jù)結(jié)構(gòu)定義數(shù)據(jù)之間的關(guān)系和對(duì)這些數(shù)據(jù)的操作方式。數(shù)據(jù)結(jié)構(gòu)屏蔽了數(shù)據(jù)存儲(chǔ)和操作的細(xì)節(jié)傲武,讓程序員能更好的處理業(yè)務(wù)邏輯蓉驹,同時(shí)擁有快速的數(shù)據(jù)存儲(chǔ)和獲取方式。

在這篇文章中揪利,你將了解到多種數(shù)據(jù)結(jié)構(gòu)以及這些數(shù)據(jù)結(jié)構(gòu)在Python中實(shí)現(xiàn)的方式态兴。

?

??

抽象數(shù)據(jù)類型和數(shù)據(jù)結(jié)構(gòu)

數(shù)據(jù)結(jié)構(gòu)是抽象數(shù)據(jù)類型(ADT)的實(shí)現(xiàn),通常疟位,是通過編程語言提供的基本數(shù)據(jù)類型為基礎(chǔ)瞻润,結(jié)合相應(yīng)的代碼來實(shí)現(xiàn)。

通常來說献汗,數(shù)據(jù)結(jié)構(gòu)分為兩類:原始數(shù)據(jù)結(jié)構(gòu)和非原始數(shù)據(jù)結(jié)構(gòu)敢订,原始數(shù)據(jù)結(jié)構(gòu)是用來表示簡單的數(shù)據(jù)關(guān)系王污,非原始數(shù)據(jù)結(jié)構(gòu)包含原始數(shù)據(jù)結(jié)構(gòu)罢吃,同時(shí),數(shù)據(jù)關(guān)系更加復(fù)雜昭齐,數(shù)據(jù)操作也更加復(fù)雜尿招。

原始數(shù)據(jù)結(jié)構(gòu)

原始數(shù)據(jù)結(jié)構(gòu) - 顧名思義 - 是最原始的或基本的數(shù)據(jù)結(jié)構(gòu)。 它們是數(shù)據(jù)操作的構(gòu)建塊阱驾,包含純粹就谜,簡單的數(shù)據(jù)值。 Python有四種原始變量類型:

  • Integers
  • Float
  • Strings
  • Boolean

Integers

您可以使用Integers表示數(shù)字?jǐn)?shù)據(jù)里覆,具體地說丧荐,可以使用從負(fù)無窮大到無窮大的整數(shù)

Float

“Float”代表“浮點(diǎn)數(shù)”。 您可以將它用于有理數(shù)喧枷,通常以十進(jìn)制數(shù)字結(jié)尾虹统,例如1.11或3.14。

請(qǐng)注意隧甚,在Python中车荔,您不必顯式聲明變量或數(shù)據(jù)的類型。 那是因?yàn)镻ython是一種動(dòng)態(tài)類型語言戚扳。 動(dòng)態(tài)類型語言是對(duì)象可以存儲(chǔ)的數(shù)據(jù)類型是可變的語言忧便。

String

String是字母,單詞或其他字符的集合帽借。 在Python中珠增,您可以通過在一對(duì)單引號(hào)或雙引號(hào)中包含一系列字符來創(chuàng)建字符串超歌。 例如:‘cake’,“cookie”等切平。您還可以對(duì)兩個(gè)或多個(gè)字符串應(yīng)用+操作來連接它們握础,就像下面的示例中一樣:

x = 'Cake'
y = 'Cookie'
x + ' & ' + y #結(jié)果:'Cake & Cookie'

以下是您可以使用字符串執(zhí)行的一些其他基本操作; 例如,您可以使用*重復(fù)字符串一定次數(shù):

# Repeat
x * 2 #結(jié)果:'CakeCake'

您還可以切割字符串

z1 = x[2:] 
print(z1)

z2 = y[0] + y[1] 
print(z2)

# 結(jié)果
ke
Co

請(qǐng)注意悴品,字符串也可以是字母數(shù)字字符禀综,但+操作仍然用于連接字符串。

x = '4'
y = '2'
x + y

'42'

Python有許多內(nèi)置方法或輔助函數(shù)來操作字符串苔严。 替換子字符串定枷,大寫段落中的某些單詞,在另一個(gè)字符串中查找字符串的位置是一些常見的字符串操作届氢。 例如:

  • 大寫首字母
str.capitalize('cookie')
'Cookie'

  • 以字符為單位檢索字符串的長度欠窒。 請(qǐng)注意,空格也計(jì)入最終結(jié)果:
str1 = "Cake 4 U"
str2 = "404"
len(str1)

8

  • 檢查字符串是否數(shù)字
str1 = "Cake 4 U"
str2 = "404"
str1.isdigit()
False

str2.isdigit()
True

  • 替換
str1 = "Cake 4 U"
str2 = "404"
str1.replace('4 U', str2)
'Cake 404'

  • 查找子字符串
str1 = 'cookie'
str2 = 'cook'
str1.find(str2)

0

str1 = 'I got you a cookie'
str2 = 'cook'
str1.find(str2)

12

Boolean

這種內(nèi)置數(shù)據(jù)類型值為:True和False退子,這通常使它們可以與整數(shù)1和0互換岖妄。布爾值在條件和比較表達(dá)式中很有用,就像在下面的例子中一樣:

x = 4
y = 2
x == y
False

x > y
True

x = 4
y = 2
z = (x==y)
if z:
    print("Cookie")
else:
    print("No Cookie")
No Cookie

數(shù)據(jù)類型轉(zhuǎn)換

有時(shí)寂祥,你需要整型荐虐,但是接口返回給你的是字符串干毅,這時(shí)款侵,你就需要數(shù)據(jù)類型轉(zhuǎn)換绘面,Python里砰奕,可以使用type函數(shù)來查看數(shù)據(jù)類型憨奸。

i = 4.0
type(i)

float

當(dāng)你把數(shù)據(jù)的類型改變時(shí)捺氢,就稱作數(shù)據(jù)類型轉(zhuǎn)換滩褥。數(shù)據(jù)類型轉(zhuǎn)換分為兩種:隱式轉(zhuǎn)換和顯示轉(zhuǎn)換竞帽。

隱式數(shù)據(jù)類型轉(zhuǎn)換

數(shù)據(jù)類型自動(dòng)轉(zhuǎn)換虽界,不需要指定汽烦,編譯器會(huì)為您處理。 看看以下示例:

# float
x = 4.0 
# integer
y = 2 
z = x/y
type(z)

float

在上面的示例中莉御,您不必將x的數(shù)據(jù)類型顯式更改為float以執(zhí)行浮點(diǎn)值除法撇吞。 編譯器隱式地為你做了這個(gè)。

顯式數(shù)據(jù)類型轉(zhuǎn)換

這種類型的數(shù)據(jù)類型轉(zhuǎn)換是用戶定義的颈将,這意味著您必須明確地通知編譯器更改某些實(shí)體的數(shù)據(jù)類型梢夯。例如:

x = 2
y = "The Godfather: Part "
fav_movie = y + x

TypeError
Traceback (most recent call last)

<ipython-input-51-b8fe90df9e0e> in <module>()
      1 x = 2
      2 y = "The Godfather: Part "
----> 3 fav_movie = y + x

TypeError: Can't convert 'int' object to str implicitly

上面的示例,沒有明確的告訴編譯器x,y的數(shù)據(jù)類型晴圾,編譯器認(rèn)為x為整型颂砸,y為字符串,當(dāng)你試圖連接字符串和整數(shù),編譯器報(bào)錯(cuò)了人乓,這個(gè)問題你可以這樣解決:

x = 2
y = "The Godfather: Part "
fav_movie = (y) + str(x)
print(fav_movie)

The Godfather: Part 2

python內(nèi)置了一些類型轉(zhuǎn)換函數(shù):int(), float(), 和 str()

非原始數(shù)據(jù)結(jié)構(gòu)

非原始數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)關(guān)系更加復(fù)雜勤篮,主要包括:

  • Arrays
  • Lists
  • Files

Arrays

首先,Python中的數(shù)組是一種收集基本數(shù)據(jù)類型的緊湊方式色罚,數(shù)組中的所有條目必須具有相同的數(shù)據(jù)類型碰缔。 但是,與其他編程語言(如C ++或Java)不同戳护,數(shù)組在Python中不常用金抡。
一般來說腌且,當(dāng)人們在Python中談?wù)摂?shù)組時(shí)梗肝,他們實(shí)際上是指List。 但是铺董,它們之間存在根本區(qū)別巫击。 對(duì)于Python,數(shù)組可以被視為存儲(chǔ)某種數(shù)據(jù)列表的更有效方式精续。 但是坝锰,列表里的元素具有相同數(shù)據(jù)類型。
在Python中重付,數(shù)組由array模塊支持顷级,在使用前需要導(dǎo)入并初始化。 存儲(chǔ)在數(shù)組中的元素受其數(shù)據(jù)類型的約束堪夭。 數(shù)組類型在數(shù)組創(chuàng)建期間指定愕把,并使用類型代碼指定拣凹,類型代碼是單個(gè)字符森爽,如下例中所示:

import array as arr
a = arr.array("I",[3,6,9])
type(a)

array.array

Lists

Python中的列表用于存儲(chǔ)同類項(xiàng)的集合。 這些是可變的嚣镜,這意味著您可以在不改變其身份的情況下更改其內(nèi)容爬迟。 您可以通過方括號(hào)[和]來識(shí)別列表,其中包含以逗號(hào)分隔的元素菊匿。 列表內(nèi)置于Python中:您無需單獨(dú)調(diào)用它們付呕。

x = []
type(x)

list

x1 = [1,2,3]
type(x1)

list

x2 = list([1,'apple',3])
type(x2)

list

print(x2[1])

apple

x2[1] = 'orange'
print(x2)

[1, 'orange', 3]

注意:就像您在上面的示例中看到的x1一樣,列表也可以保存異構(gòu)項(xiàng)跌捆,從而滿足數(shù)組的存儲(chǔ)功能徽职。 除非您想對(duì)此集合應(yīng)用某些特定操作。
Python提供了許多操作和處理列表的方法佩厚。 將新項(xiàng)添加到列表姆钉,從列表中刪除一些項(xiàng),排序或反轉(zhuǎn)列表是常見的列表操作。 例如:

  • 使用append()將11添加到list_num列表中潮瓶。 默認(rèn)情況下陶冷,此數(shù)字將添加到列表的末尾。
list_num = [1,2,45,6,7,2,90,23,435]
list_char = ['c','o','o','k','i','e']

list_num.append(11) 
print(list_num)

[1, 2, 45, 6, 7, 2, 90, 23, 435, 11]

  • 插入數(shù)據(jù)
list_num.insert(0, 11)
print(list_num)

[11, 1, 2, 45, 6, 7, 2, 90, 23, 435, 11]

  • 刪除元素
list_char.remove('o') 
print(list_char)

['c', 'o', 'k', 'i', 'e']

  • 根據(jù)索引刪除元素
list_char.pop(-2) # Removes the item at the specified position
print(list_char)

['c', 'o', 'k', 'e']

list_num.sort()
print(list_num)

[1, 2, 2, 6, 7, 11, 11, 23, 45, 90, 435]

list.reverse(list_num)
print(list_num)

[435, 90, 45, 23, 11, 11, 7, 6, 2, 2, 1]

Array vs List

你可能想毯辅,既然List那么方便埂伦,為什么還要Array,這是因?yàn)橛捎贏rray存儲(chǔ)的數(shù)據(jù)類型一致思恐,可以通過簡單的函數(shù)完成一些特殊的操作沾谜。例如

array_char = array.array("u",["c","a","t","s"])
array_char.tostring()
print(array_char)

array('u', 'cats')

您可以應(yīng)用array_char的tostring()函數(shù),因?yàn)镻ython知道數(shù)組中的所有項(xiàng)都具有相同的數(shù)據(jù)類型胀莹,因此操作在每個(gè)元素上的行為方式相同类早。 因此,在處理大量同類數(shù)據(jù)類型時(shí)嗜逻,數(shù)組非常有用涩僻。 因?yàn)镻ython不必單獨(dú)記住每個(gè)元素的數(shù)據(jù)類型細(xì)節(jié); 對(duì)于某些用途,與列表相比栈顷,數(shù)組可能更快并且使用更少的內(nèi)存逆日。

在我們討論數(shù)組的主題時(shí),還值得提一下NumPy數(shù)組萄凤。 NumPy數(shù)組在數(shù)據(jù)科學(xué)領(lǐng)域中被廣泛用于處理多維數(shù)組室抽。 它們通常比數(shù)組模塊和Python列表更有效。 在NumPy數(shù)組中讀取和寫入元素更快靡努,并且它們支持“矢量化”操作坪圾,例如元素添加。 此外惑朦,NumPy數(shù)組可以有效地處理大型稀疏數(shù)據(jù)集兽泄。例如:

import numpy as np

arr_a = np.array([3, 6, 9])
arr_b = arr_a/3 # Performing vectorized (element-wise) operations 
print(arr_b)

[ 1\.  2\.  3.]

arr_ones = np.ones(4)
print(arr_ones)

[ 1\.  1\.  1\.  1.]

multi_arr_ones = np.ones((3,4)) 
print(multi_arr_ones)

[[ 1\.  1\.  1\.  1.]
 [ 1\.  1\.  1\.  1.]
 [ 1\.  1\.  1\.  1.]]

通常,列表數(shù)據(jù)結(jié)構(gòu)可以進(jìn)一步分類為線性和非線性數(shù)據(jù)結(jié)構(gòu)漾月。 堆棧和隊(duì)列稱為線性數(shù)據(jù)結(jié)構(gòu)病梢,而圖形和樹是非線性數(shù)據(jù)結(jié)構(gòu)。 這些結(jié)構(gòu)及其概念可能相對(duì)復(fù)雜梁肿,但由于它們與現(xiàn)實(shí)世界模型的相似性而被廣泛使用蜓陌。

注意:在線性數(shù)據(jù)結(jié)構(gòu)中,數(shù)據(jù)項(xiàng)按順序組織吩蔑。 數(shù)據(jù)項(xiàng)一個(gè)接一個(gè)地遍歷钮热,并且可以在單次運(yùn)行期間遍歷線性數(shù)據(jù)結(jié)構(gòu)中的所有數(shù)據(jù)項(xiàng)。 但是烛芬,在非線性數(shù)據(jù)結(jié)構(gòu)中隧期,數(shù)據(jù)項(xiàng)不是按順序組織的痴奏。 這意味著元素可以連接到多個(gè)元素,以反映這些項(xiàng)目之間的特殊關(guān)系厌秒。 在單次運(yùn)行期間读拆,可能無法遍歷非線性數(shù)據(jù)結(jié)構(gòu)中的所有數(shù)據(jù)項(xiàng)。

Stack

堆棧是根據(jù)Last-In-First-Out(LIFO)概念插入和移除的對(duì)象的容器鸵闪。 想象一下這樣一種場景檐晕,即在一個(gè)有一堆盤子的晚宴上,總是在堆頂部添加或移除盤子蚌讼。 在計(jì)算機(jī)科學(xué)中辟灰,這個(gè)概念用于評(píng)估表達(dá)式和語法分析,調(diào)度算法/例程等篡石。

可以使用Python中的列表來實(shí)現(xiàn)堆棧芥喇。 將元素添加到堆棧時(shí),它被稱為推送操作凰萨,而當(dāng)您刪除或刪除元素時(shí)继控,它被稱為彈出操作。 請(qǐng)注意胖眷,當(dāng)您在Python中使用堆棧時(shí)武通,實(shí)際上有一個(gè)pop()方法可供使用:

# Bottom -> 1 -> 2 -> 3 -> 4 -> 5 (Top)
stack = [1,2,3,4,5] 
stack.append(6) # Bottom -> 1 -> 2 -> 3 -> 4 -> 5 -> 6 (Top)
print(stack)

[1, 2, 3, 4, 5, 6]

stack.pop() # Bottom -> 1 -> 2 -> 3 -> 4 -> 5 (Top)
stack.pop() # Bottom -> 1 -> 2 -> 3 -> 4 (Top)
print(stack)

[1, 2, 3, 4]

Queue

隊(duì)列是根據(jù)先進(jìn)先出(FIFO)原則插入和移除的對(duì)象的容器。 在現(xiàn)實(shí)世界中排隊(duì)的一個(gè)很好的例子是售票柜臺(tái)的線路珊搀,根據(jù)他們的到達(dá)順序上車冶忱,因此首先到達(dá)的人也是第一個(gè)離開的人。
隊(duì)列可以有許多不同的類型境析,但在本教程中僅討論最基本的類型囚枪。 列表實(shí)現(xiàn)隊(duì)列效率不高,因?yàn)榱斜砟┪驳腶ppend()和pop()速度很快劳淆, 但是链沼,最后插入和從列表開頭刪除不是那么快,因?yàn)樗枰匚恢玫囊苿?dòng)憔儿。

Graphs

數(shù)學(xué)和計(jì)算機(jī)科學(xué)中的圖是由節(jié)點(diǎn)組成的網(wǎng)絡(luò)忆植,節(jié)點(diǎn)也稱為頂點(diǎn)放可,它們可以相互連接谒臼,也可以不相互連接。 連接兩個(gè)節(jié)點(diǎn)的線或路徑稱為邊耀里。 如果邊緣具有特定的流動(dòng)方向蜈缤,那么它是有向圖,方向邊緣被稱為弧冯挎。 否則底哥,如果未指定方向,則該圖形稱為無向圖。
這可能聽起來非常理論化趾徽,當(dāng)你深入挖掘時(shí)會(huì)變得相當(dāng)復(fù)雜续滋。 然而,圖形是數(shù)據(jù)科學(xué)中特別重要的概念孵奶,通常用于模擬現(xiàn)實(shí)生活中的問題疲酌。 社會(huì)網(wǎng)絡(luò),化學(xué)和生物學(xué)的分子研究了袁,地圖朗恳,推薦系統(tǒng)都依賴于圖形和圖形理論原理。這有個(gè)Python實(shí)現(xiàn)圖的例子:

graph = { "a" : ["c", "d"],
          "b" : ["d", "e"],
          "c" : ["a", "e"],
          "d" : ["a", "b"],
          "e" : ["b", "c"]
        }

def define_edges(graph):
    edges = []
    for vertices in graph:
        for neighbour in graph[vertices]:
            edges.append((vertices, neighbour))
    return edges

print(define_edges(graph))

[('a', 'c'), ('a', 'd'), ('b', 'd'), ('b', 'e'), ('c', 'a'), ('c', 'e'), ('e', 'b'), ('e', 'c'), ('d', 'a'), ('d', 'b')]

您可以使用Graph做一些很酷的事情载绿,例如嘗試找到兩個(gè)節(jié)點(diǎn)之間存在路徑粥诫,或者找到兩個(gè)節(jié)點(diǎn)之間的最短路徑,確定圖形中的周期崭庸。

事實(shí)上怀浆,著名的“旅行商問題”是找到一個(gè)最短路徑,它只訪問每個(gè)節(jié)點(diǎn)一次并返回起點(diǎn)怕享。 有時(shí)圖形的節(jié)點(diǎn)或弧已經(jīng)分配了權(quán)重或成本揉稚,您可以將其視為指定行走難度級(jí)別,并且您有興趣找到最便宜或最簡單的路徑熬粗。

Tree

現(xiàn)實(shí)世界中的一棵樹是一種生物搀玖,它的根在地上,樹枝上有葉子驻呐、果實(shí)灌诅。樹的分支以一種有組織的方式展開。在計(jì)算機(jī)科學(xué)中含末,樹被用來描述數(shù)據(jù)如何被組織猜拾,除了根在頂部并且樹枝,樹葉跟隨佣盒,向底部蔓延并且樹被繪制為與真實(shí)樹相比被倒置挎袜。

為了引入更多的符號(hào),根始終位于樹的頂部肥惭。后面的其他節(jié)點(diǎn)稱為分支盯仪,每個(gè)分支中的最終節(jié)點(diǎn)稱為葉。您可以將每個(gè)分支想象成一個(gè)較小的樹本身蜜葱。根通常稱為父節(jié)點(diǎn)全景,它在其下面引用的節(jié)點(diǎn)稱為子節(jié)點(diǎn)。具有相同父節(jié)點(diǎn)的節(jié)點(diǎn)稱為兄弟節(jié)點(diǎn)牵囤。

樹有助于定義現(xiàn)實(shí)世界場景爸黄,并且從游戲世界到設(shè)計(jì)XML解析器滞伟,以及PDF設(shè)計(jì)原則都基于樹。在數(shù)據(jù)科學(xué)中炕贵,“基于決策樹的學(xué)習(xí)”實(shí)際上構(gòu)成了一個(gè)大范圍的研究梆奈。存在許多著名的方法,如裝袋称开,提升使用樹模型來生成預(yù)測模型鉴裹。像國際象棋這樣的游戲構(gòu)建了一棵巨大的樹,其中包含所有可能的動(dòng)作來分析和應(yīng)用啟發(fā)式方法來決定最佳操作钥弯。

?

??

class Tree:
    def __init__(self, info, left=None, right=None):
        self.info = info
        self.left  = left
        self.right = right

    def __str__(self):
        return (str(self.info) + ', Left child: ' + str(self.left) + ', Right child: ' + str(self.right))

tree = Tree(1, Tree(2, 2.1, 2.2), Tree(3, 3.1))
print(tree)

1, Left child: 2, Left child: 2.1, Right child: 2.2, Right child: 3, Left child: 3.1, Right child: None

Tuples

元組是另一種標(biāo)準(zhǔn)序列數(shù)據(jù)類型径荔。 元組和列表之間的區(qū)別在于元組是不可變的,這意味著一旦定義脆霎,您就無法刪除总处,添加或編輯其中的任何值。 這可能在您可能將控件傳遞給其他人但您不希望它們操縱集合中的數(shù)據(jù)但可能只是在數(shù)據(jù)副本中看到它們或單獨(dú)執(zhí)行操作的情況下有用睛蛛。例如

x_tuple = 1,2,3,4,5
y_tuple = ('c','a','k','e')
x_tuple[0]

1

y_tuple[3]
x_tuple[0] = 0 # Cannot change values inside a tuple

---------------------------------------------------------------------------

TypeError
Traceback (most recent call last)

<ipython-input-74-b5d6da8c1297> in <module>()
      1 y_tuple[3]
----> 2 x_tuple[0] = 0 # Cannot change values inside a tuple

TypeError: 'tuple' object does not support item assignment

Dictionary

如果你想實(shí)現(xiàn)類似于電話簿的東西鹦马,字典是要使用的數(shù)據(jù)結(jié)構(gòu)。 您之前看到的所有數(shù)據(jù)結(jié)構(gòu)都不適用于電話簿忆肾。

這是一本字典可以派上用場的時(shí)候荸频。 字典由鍵值對(duì)組成。

x_dict = {'Edward':1, 'Jorge':2, 'Prem':3, 'Elisa':4}
del x_dict['Elisa']
x_dict

{'Edward': 1, 'Jorge': 2, 'Prem': 3}

x_dict['Edward'] # Prints the value stored with the key 'Kevin'.

1

您可以在詞典上應(yīng)用許多其他內(nèi)置功能:

len(x_dict)

3

x_dict.keys()

dict_keys(['Prem', 'Edward', 'Jorge'])

x_dict.values()

dict_values([3, 1, 2])

Sets

集合是唯一對(duì)象的集合客冈。 這些對(duì)于創(chuàng)建僅在數(shù)據(jù)集中包含唯一值的列表很有用旭从。 它是一個(gè)無序的集合,但是一個(gè)可變的集合场仲。

x_set = set('CAKE&COKE')
y_set = set('COOKIE')

print(x_set)

{'A', '&', 'O', 'E', 'C', 'K'}

print(y_set) # Single unique 'o'

{'I', 'O', 'E', 'C', 'K'}

print(x - y) # All the elements in x_set but not in y_set

---------------------------------------------------------------------------

NameError                                 Traceback (most recent call last)

<ipython-input-3-31abf5d98454> in <module>()
----> 1 print(x - y) # All the elements in x_set but not in y_set

NameError: name 'x' is not defined

print(x_set|y_set) # Unique elements in x_set or y_set or both

{'C', '&', 'E', 'A', 'O', 'K', 'I'}

print(x_set & y_set) # Elements in both x_set and y_set

{'O', 'E', 'K', 'C'}

Files

文件傳統(tǒng)上是數(shù)據(jù)結(jié)構(gòu)的一部分和悦。 雖然大數(shù)據(jù)在數(shù)據(jù)科學(xué)行業(yè)中很常見,但是沒有存儲(chǔ)和檢索先前存儲(chǔ)的信息的能力的編程語言幾乎沒有用渠缕。在Python中讀取和寫入文件的語法與其他編程語言類似鸽素,但更容易處理。 以下是一些可幫助您使用Python處理文件的基本功能:

  • open()打開系統(tǒng)中的文件亦鳞,文件名是要打開的文件的名稱;
  • read()讀取整個(gè)文件;
  • readline()一次讀取一行;
  • write()將字符串寫入文件馍忽,并返回寫入的字符數(shù); 和
  • close()關(guān)閉文件。
# File modes (2nd argument): 'r'(read), 'w'(write), 'a'(appending), 'r+'(both reading and writing)
f = open('file_name', 'w')

# Reads entire file
f.read() 

# Reads one line at a time
f.readline() 

# Writes the string to the file, returning the number of char written
f.write('Add this line.') 

f.close()

open()函數(shù)中的第二個(gè)參數(shù)是打開文件模式燕差。 它允許您指定是要讀仍馑瘛(r),寫入(w)谁不,追加(a)還是讀取和寫入(r +)坐梯。

總結(jié)

到此,好學(xué)的你對(duì)Python的數(shù)據(jù)結(jié)構(gòu)已經(jīng)有了一個(gè)基本的了解了刹帕〕逞看完了歸看完了,需要勤勞的你動(dòng)手操練起來呀偷溺!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蹋辅,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子挫掏,更是在濱河造成了極大的恐慌侦另,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件尉共,死亡現(xiàn)場離奇詭異褒傅,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)袄友,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門殿托,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人剧蚣,你說我怎么就攤上這事支竹。” “怎么了鸠按?”我有些...
    開封第一講書人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵礼搁,是天一觀的道長。 經(jīng)常有香客問我目尖,道長馒吴,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任瑟曲,我火速辦了婚禮募书,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘测蹲。我一直安慰自己莹捡,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開白布扣甲。 她就那樣靜靜地躺著篮赢,像睡著了一般。 火紅的嫁衣襯著肌膚如雪琉挖。 梳的紋絲不亂的頭發(fā)上启泣,一...
    開封第一講書人閱讀 49,792評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音示辈,去河邊找鬼寥茫。 笑死,一個(gè)胖子當(dāng)著我的面吹牛矾麻,可吹牛的內(nèi)容都是我干的纱耻。 我是一名探鬼主播芭梯,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼弄喘!你這毒婦竟也來了玖喘?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤蘑志,失蹤者是張志新(化名)和其女友劉穎累奈,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體急但,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡澎媒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了波桩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片戒努。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖突委,靈堂內(nèi)的尸體忽然破棺而出柏卤,到底是詐尸還是另有隱情,我是刑警寧澤匀油,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布缘缚,位于F島的核電站,受9級(jí)特大地震影響敌蚜,放射性物質(zhì)發(fā)生泄漏桥滨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一弛车、第九天 我趴在偏房一處隱蔽的房頂上張望齐媒。 院中可真熱鬧,春花似錦纷跛、人聲如沸喻括。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽唬血。三九已至,卻和暖如春唤崭,著一層夾襖步出監(jiān)牢的瞬間拷恨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國打工谢肾, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留腕侄,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像冕杠,于是被迫代替她去往敵國和親微姊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容