第七章 核心數(shù)據(jù)結(jié)構(gòu)(一)

一舵抹、 什么是數(shù)據(jù)結(jié)構(gòu)

在計算機科學中,數(shù)據(jù)結(jié)構(gòu)(英語:data structure)是計算機中存儲轻要、組織數(shù)據(jù)的方式宇立。

1. Python 中核心數(shù)據(jù)結(jié)構(gòu)分類

  • 序列類型: 字符串、列表步势、元組
  • 泛映射類型: 字典
  • 集合: set()

在 Python中列表氧猬、元組、字典坏瘩、集合都稱為容器盅抚。

2. 序列類型數(shù)據(jù)結(jié)構(gòu)共有的特點:

  • 序列類型中的元素都有對應的位置,這個位置叫偏移量或者索引
千鋒云計算


二倔矾、列表

1. 列表的特性介紹

  • 列表內(nèi)的元素是可變的妄均。
    -> 列表的元素可以是 Python 的任何類型的數(shù)據(jù)和對象

    如:字符串、列表哪自、元組丰包、字典、集合壤巷、函數(shù)邑彪、類
    
  • 列表中的具有相同值的元素允許出現(xiàn)多次

[1, 2, 1, 1, 1, 1, 3, 3, 2]

2. 創(chuàng)建列表

image.png

嵌套的列表

列表中可包含 python 中任何類型的元素(對象),當然也可以包括一個或多個列表

li = [['one', 'two', 'three'], [1, 2, 3]]

3.列表的基本操作

3.1 取值

沒有嵌套的列表

li_f = [ 'insert', 'append','extend', 'remove', 'pop', 'sort', 'sorted']

li_f[0]   # insert

嵌套的列表

l2 = [['one', 'two', 'three'], [1, 2, 3]]
l2[0][1]  # two

3.2 切片

同字符串的切片一樣,詳情參考字符串教程中的切片

幾點簡單示例

li_f = [ 'insert', 'append','extend', 'remove', 'pop', 'sort', 'sorted']

# 獲取全部元素
li_f[:]

# 反轉(zhuǎn)
li_f[::-1]

3.3 必會方法

# 先定義一個列表
li = [5, 4, 3, 2, 1, 0]

len()
方法是一個內(nèi)置函數(shù)隙笆,可以統(tǒng)計序列類型的數(shù)據(jù)結(jié)構(gòu)的長度锌蓄。

n = len(li)
print(n)

in
判斷元素是否存在于列表中。

if 5 in li:
    print('我存在')

append()
向列表的最后位置撑柔,添加一個元素瘸爽,只接收一個參數(shù)。

li.append('a')
print(li)

insert()
向原列表的指定位置插入一個元素铅忿,接收兩個參數(shù)剪决,
第一個是索引號,第二個是要插入的元素檀训。

li.insert(0, 'b')
print(li)

extend()
可以把一個序列類型中的每個元素追加到原列表中柑潦,接收的參數(shù)是一個序列類型的數(shù)據(jù)(字符串,列表)峻凫。

l2 = ['qf','yangge']
li.extend(l2)
print(li)

remove()
移除列表中某個指定的元素渗鬼,沒有返回值,并且假如有多個相同值的元素存在荧琼,每次只會移除排在最前面的那個元素

obj.remove('a') 譬胎。

pop()

從原列表中刪除一個元素差牛,并且把這個元素返回。
接收零個或一個參數(shù)堰乔,參數(shù)是偏移量偏化,int 類型。

 # 刪除列表中的最后一個元素
li.pop() 

 # 刪除列表中第二個索引號對應的元素镐侯,并且返回這個元素侦讨,用變量名`n` 接收。  
n = li.pop(2)   

''.join() 把列表中的元素拼接起來苟翻,返回的是字符串類型

l7 = ['a','b']
s = ''.join(l7)
print(s)

# 輸出
'ab'

還可以以指定的字符進行拼接

l7 = ['a','b']
s = '-'.join(l7)
print(s)

# 輸出
'a-b'

index 返回指定元素的索引號韵卤。

idx = li.index(4) 
print(idx)

*count() 是列表的內(nèi)置方法,可以統(tǒng)計出相同值的元素在列表中總共
出現(xiàn)都少次.

num = obj.count(4)
print(num)

sort()
是列表的內(nèi)置方法袜瞬,對列表中元素進行排序怜俐。
默認是升序, 這個改變列表自身邓尤。

還可以接收一個 reverse (反轉(zhuǎn)) 參數(shù), 其值可以是 True 和 False拍鲤。
False 是升序,True 是降序汞扎。需要是同一種數(shù)據(jù)類型季稳,比如都是字符串,或都是整型澈魄。

示例:

l5 = [2, 4, 23, 34, 100]

l5.sort(reverse=True)

print(l5)
# 輸出:
[100, 34, 23, 4, 2] 

sorted()
是 python 的內(nèi)置函數(shù)景鼠,接受一個參數(shù),參數(shù)可以是任意序列類型的數(shù)據(jù)痹扇,但是元素的類型必須相同.
比如是含有都是 str 的列表铛漓,或者是含有都是 int 的列表
它會返回一個新的類別,原列表不變鲫构。

li = [2,10,3,7]
l10 = sorted(li)  
print(li)
print(l10)   

4. 通過索引和切片修改列表

索引號

In [11]: int_number = [1,2,3,4,5]
    
In [12]: int_number[2]=20
    
In [13]: int_number
Out[13]: [1, 2, 20, 4, 5]

切片

li = [1, 2, 3, 4, 5]
li[1:3] = [0]
print(li)

5. 引用賦值

In [192]: a
Out[192]: ['6', '5', '3', '1', '1']

In [193]: b = a

In [194]: b
Out[194]: ['6', '5', '3', '1', '1']

In [195]: a[-2]=2

可以看到浓恶,這種用等號將一個列表賦值給多個變量時,使用其中任意一個變量對列表的操作结笨,結(jié)果都會同步到其他變量的值包晰。

在這種現(xiàn)象中,就像前面學到的變量的賦值炕吸,變量和列表本身之間的關(guān)系稱作伐憾,變量對列表對象的引用,并沒有創(chuàng)建一個新的列表赫模。

解決方法

  • 使用以下任意一種方法,都可以將原列表的值賦值給一個新的列表
  1. 列表的內(nèi)置函數(shù) obj.copy()
  2. 序列類型函數(shù) list(obj)
  3. 列表切片

以上方法得到的列表可賦值給一個新的變量屁使, 這變量各自有自己的列表對象淘钟,互相之間不會影響

6. 深淺拷貝

In [110]: base_count = ['name',['money',100.00]]

In [111]: xmen = list(base_count)

In [112]: xpan = base_count.copy()

In [113]: xmen[1][1] = 20.00

In [114]: xpan
Out[114]: ['name', ['money', 20.0]]


點我可視化你的代碼

千鋒云計算
千鋒云計算

解決辦法

# 導入模塊
import copy 

base_count = ['name',['money',100.00]]

# 利用模塊中的 copy 方法創(chuàng)建一個全新的對象
xmen_new = copy.deepcopy(base_count)

# 利用模塊中的 copy 方法創(chuàng)建另一個全新的對象
xpan_new = copy.deepcopy(base_count)

# 改變其中一個對象中的值
xpan_new[1][1] = 50.00

# 分別打印兩個對象
print(xmen_new)

print(xpan_new)


三柿汛、元組

1 元組特性介紹

  • 元組和列表一樣,也是一種序列莉钙。
  • 唯一的不同是,元組是相對不可變的筛谚。

2 高效創(chuàng)建元組

t1 = ()    # 創(chuàng)建 空 元素的元組
  • 你以為這就完了?

    單一元素元組怎么搞停忿?

In [168]: v_tp = (3)

In [169]: only_tp = 3,

In [170]: type(v_tp)

Out[170]: int

In [171]: type(only_tp)
Out[171]: tuple

創(chuàng)建非空元素的元組是用逗號驾讲,而不是用小括號

tuple()
可以對其他序列類型的數(shù)據(jù)轉(zhuǎn)換為元組。

In [173]: s1 = 'car'

In [174]: li = [1,2,3]

In [175]: tuple(s1)
Out[175]: ('c', 'a', 'r')

In [176]: tuple(li)
Out[176]: (1, 2, 3)

In [177]: dl = [1,2,3,['a','b']]

In [178]: tuple(dl)
Out[178]: (1, 2, 3, ['a', 'b'])
In [33]: t1 = (1, 2, 3, ['a', 'b'])
In [34]: t1[3][0]=0
In [35]: t1
Out[35]: (1, 2, 3, [0, 'b'])

3 使用元組的理由

給我一個理由

  1. 占用內(nèi)存空間小
  2. 元組內(nèi)的值不會被意外的修改
  3. 可作為字典的鍵
  4. 函數(shù)的參數(shù)是以元組形式傳遞的
  5. 命名元組有時候可以代替類的對象(面向?qū)ο蟮臅r候講)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末席赂,一起剝皮案震驚了整個濱河市吮铭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌颅停,老刑警劉巖谓晌,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異癞揉,居然都是意外死亡纸肉,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進店門喊熟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來柏肪,“玉大人,你說我怎么就攤上這事芥牌》澄叮” “怎么了?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵壁拉,是天一觀的道長谬俄。 經(jīng)常有香客問我,道長弃理,這世上最難降的妖魔是什么溃论? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮案铺,結(jié)果婚禮上蔬芥,老公的妹妹穿的比我還像新娘。我一直安慰自己控汉,他們只是感情好笔诵,可當我...
    茶點故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著姑子,像睡著了一般乎婿。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上街佑,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天谢翎,我揣著相機與錄音捍靠,去河邊找鬼。 笑死森逮,一個胖子當著我的面吹牛榨婆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播褒侧,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼良风,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了闷供?” 一聲冷哼從身側(cè)響起烟央,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎歪脏,沒想到半個月后疑俭,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡婿失,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年钞艇,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片移怯。...
    茶點故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡香璃,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出舟误,到底是詐尸還是另有隱情葡秒,我是刑警寧澤,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布嵌溢,位于F島的核電站眯牧,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏赖草。R本人自食惡果不足惜学少,卻給世界環(huán)境...
    茶點故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望秧骑。 院中可真熱鬧版确,春花似錦、人聲如沸乎折。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽骂澄。三九已至吓蘑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背磨镶。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工溃蔫, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人琳猫。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓伟叛,卻偏偏與公主長得像,于是被迫代替她去往敵國和親脐嫂。 傳聞我的和親對象是個殘疾皇子痪伦,可洞房花燭夜當晚...
    茶點故事閱讀 44,573評論 2 353

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