国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Python入門-高級(jí)數(shù)據(jù)結(jié)構(gòu)

jayzou / 2365人閱讀

摘要:下面讓我們一塊來(lái)看下的中高級(jí)數(shù)據(jù)結(jié)構(gòu)。到現(xiàn)在,我們學(xué)習(xí)了列表元組字典和集合種高級(jí)數(shù)據(jù)結(jié)構(gòu)。

< 返回索引頁(yè)

高級(jí)數(shù)據(jù)結(jié)構(gòu)

列表與元組

什么是列表

列表的操作

什么是元組

元組的操作

字典與集合

字典的定義

字典的操作

集合的定義

集合的操作

序列

序列的通用操作

可變類型和不可變類型

深copy和淺copy

總結(jié)

練習(xí)

參考

高級(jí)數(shù)據(jù)結(jié)構(gòu)

我們知道Python的變量數(shù)據(jù)類型有整型、浮點(diǎn)型、復(fù)數(shù)、字符串和布爾型,我們會(huì)發(fā)現(xiàn)這些類型結(jié)構(gòu)都比較的簡(jiǎn)單。在我們學(xué)習(xí)數(shù)學(xué)時(shí),有整數(shù)、浮點(diǎn)數(shù)等這些基本的數(shù)據(jù)類型,還有數(shù)組等這種高級(jí)的數(shù)據(jù)類型供我們來(lái)處理一些復(fù)雜的數(shù)據(jù)問(wèn)題使用。那么Python語(yǔ)言作為一門高級(jí)的編程語(yǔ)言,對(duì)這些高級(jí)的數(shù)據(jù)結(jié)構(gòu)也是支持的。

下面讓我們一塊來(lái)看下Python的中高級(jí)數(shù)據(jù)結(jié)構(gòu)。

列表與元組 什么是列表

列表,Python 類為list,一種Python的高級(jí)數(shù)據(jù)結(jié)構(gòu),使用中括號(hào)包含,其中內(nèi)部元素使用逗號(hào)分隔,內(nèi)部元素可以是任何類型包含空。有點(diǎn)像我們數(shù)學(xué)中學(xué)習(xí)的數(shù)組。

a = [1,2,3]
b = ["1",2,None]
c = [1,2,[3,4]]
d = []
e = [1]

知識(shí)點(diǎn):

列表中的元素是有序的。

列表的操作

列表的下標(biāo)操作

獲取列表中的值

列表和字符串一樣是可以通過(guò)下標(biāo)來(lái)獲取指定位置的元素的。列表的下標(biāo)是從1開(kāi)始的,最大下標(biāo)值為元素個(gè)數(shù)減1或-1表示。

>>> a = [1,2,3]
>>> print(a[1])
2

列表更新

可通過(guò)列表的下標(biāo)來(lái)替換更新列表中指定元素。

>>> a = [1,2,3]
>>> a[2] = "2"
>>> a
[1, 2, "2"]
>>>

列表的刪除

>>> a
[1, 2, "2"]
>>> del a[2]
>>> a
[1, 2]

切片

可通過(guò)下標(biāo)來(lái)做列表的截取等操作,在Python中也叫切片。格式如:list[start_index:end_index:step_length]
start_index開(kāi)始下標(biāo)省略時(shí),默認(rèn)為 0 ;end_index結(jié)束下標(biāo)省略時(shí),默認(rèn)為最大下標(biāo),及長(zhǎng)度-1-1step_length步長(zhǎng)省略時(shí),默認(rèn)為1。

>>> a
[1, 2, 3, 4]
>>> a[1:-1]
[2, 3]
>>> t = [1,2,3,4,5]
>>> t[::2]
[1, 3, 5]

運(yùn)算符及內(nèi)建函數(shù)操作

可用使用內(nèi)建函數(shù)len 來(lái)獲取列表的長(zhǎng)度,該長(zhǎng)度及列表元素的個(gè)數(shù)。

>>> a
[1, 2]
>>> len(a)
2
>>> a[::2]
[1, 3]

列表可使用運(yùn)算符 +實(shí)現(xiàn)連接操作。

>>> [1,2,3]+[5,6,7]
[1, 2, 3, 5, 6, 7]

可以使用內(nèi)建函數(shù)reversed 將列表反轉(zhuǎn),該函數(shù)返回一個(gè)迭代器(可理解為一個(gè)可遍歷對(duì)象即可,后邊會(huì)講解)。

>>> a = [1,2,3,4]
>>> reversed(a)
  
>>> list(reversed(a))
[4, 3, 2, 1]

除了使用reversed 函數(shù),也可使用列表的切片來(lái)反轉(zhuǎn):

>>> a
[1, 2, 3, 4]
>>> a[::-1]
[4, 3, 2, 1]

python 可使用 * 來(lái)實(shí)現(xiàn)重復(fù)。

>>> [1]*2
[1, 1]

列表也支持in、not in成員運(yùn)算符

>>> 3 in [1,2,3]
True
>>> 3 not in [1,2,3]
False

列表的方法

>>> dir(list)
["__add__", "__class__", "__contains__", "__delattr__", "__delitem__", "__dir__", "__doc__", "__eq__", "__format__", "__ge__", "__getattribute__", "__getitem__", "__gt__", "__hash__", "__iadd__", "__imul__", "__init__", "__init_subclass__", "__iter__", "__le__", "__len__", "__lt__", "__mul__", "__ne__", "__new__", "__reduce__", "__reduce_ex__", "__repr__", "__reversed__", "__rmul__", "__setattr__", "__setitem__", "__sizeof__", "__str__", "__subclasshook__", "append", "clear", "copy", "count", "extend", "index", "insert", "pop", "remove", "reverse", "sort"]

list.append(obj) 在列表末尾添加新的對(duì)象

list.count(obj) 統(tǒng)計(jì)某個(gè)元素在列表中出現(xiàn)的次數(shù)

list.extend(seq) 在列表末尾一次性追加另一個(gè)序列中的多個(gè)值(用新列表擴(kuò)展原來(lái)的列表)

list.index(obj) 從列表中找出某個(gè)值第一個(gè)匹配項(xiàng)的索引位置

list.insert(index, obj) 將對(duì)象插入列表

list.pop([index=-1]]) 移除列表中的一個(gè)元素(默認(rèn)最后一個(gè)元素),并且返回該元素的值

list.remove(obj) 移除列表中某個(gè)值的第一個(gè)匹配項(xiàng)

list.reverse() 反向列表中元素

list.sort(cmp=None, key=None, reverse=False) 對(duì)原列表進(jìn)行排序

list.clear() 清空列表

list.copy() 復(fù)制列表

什么是元組

元組,Python中類為 tuple。使用小括號(hào)包括,內(nèi)部元素使用逗號(hào)分隔,可為任意值。與列表不同之處為,其內(nèi)部元素不可修改,及不能做刪除、更新操作。

>>> a = (1,2,3)
>>> b = ("1",[2,3])
>>> c = ("1","2",(3,4))
>>> d = ()
>>> e = (1,)

說(shuō)明:

當(dāng)元組中元素只有一個(gè)時(shí),結(jié)尾要加逗號(hào)。若不加逗號(hào),python解釋器將解釋成元素本身的類型,而非元組類型。

元組的操作

通過(guò)下標(biāo)操作

通過(guò)小標(biāo)來(lái)獲取元素值,使用方法同列表。

切片的處理,使用方法同列表。

不可通過(guò)下標(biāo)做刪除和更新操作。

>>> c[0] = 1
Traceback (most recent call last):
  File "", line 1, in 
TypeError: "tuple" object does not support item assignment
>>> del c[0]
Traceback (most recent call last):
  File "", line 1, in 
TypeError: "tuple" object doesn"t support item deletion

運(yùn)算符及內(nèi)建函數(shù)操作

元組本身是不可變,但是可通過(guò)+來(lái)構(gòu)成新的元組。

>>> a
(1, 2, 3)
>>> b
("1", [2, 3])
>>> a + b
(1, 2, 3, "1", [2, 3])

可使用內(nèi)建函數(shù) len 獲取元組長(zhǎng)度。

可使用* 元素符實(shí)現(xiàn)元素的重復(fù)。

>>> a
(1, 2, 3)
>>> a*2
(1, 2, 3, 1, 2, 3)

元組也支持innot in 成員運(yùn)算符。

字典與集合 字典的定義

在編程世界中,有一種高級(jí)結(jié)構(gòu)是使用比較廣泛的,即key和value值一一對(duì)應(yīng)的映射結(jié)構(gòu)。它就像一個(gè)字典一樣,通過(guò)關(guān)鍵字key,來(lái)找到對(duì)應(yīng)的value值。該種結(jié)構(gòu)在Python中叫做字典,英文為dict,使用大括號(hào)包括,其中元素為冒號(hào)分隔key-value對(duì),中間用逗號(hào)分隔。

結(jié)構(gòu)如下:

>>> a = {"name":"Tim", "age":18}
>>> b = {}
>>> c = dict(name="Tim", age=18)
>>> d = {(1,2):"Time"}

知識(shí)點(diǎn):

字典中,key 值唯一,且類型為不可變類型,如字符串、元組、數(shù)字。

value 值可以為任意類型;

字典中的元素是無(wú)序的。

字典的操作

獲取字典某元素

可使用key和方法get來(lái)獲取字典中的值。

>>> a = {"name":"Tim", "age":18}
>>> a["name"]
"Tim"
>>> a.get("name","")
"Tim"
>>> a["address"]
Traceback (most recent call last):
  File "", line 1, in 
KeyError: "address"

知識(shí)點(diǎn):

當(dāng)字典沒(méi)有沒(méi)有該key時(shí),使用key獲取,會(huì)拋出KeyError錯(cuò)誤;使用get不會(huì)拋出,會(huì)返回None。

可使用get(key,[default])函數(shù)給

更新和刪除字典

字典是可變的,可通過(guò)key來(lái)做更新和刪除操作。

# 修改 
>>> a
{"name": "Tim", "age": 18}
>>> a["address"] = "Beijing"
>>> a
{"name": "Tim", "age": 18, "address": "Beijing"}
# 刪除
>>> del a["age"]
>>> a
{"name": "Tim", "address": "Beijing"}

字典的方法操作

字典的方法提供了更加豐富的操作功能:

radiansdict.clear() 刪除字典內(nèi)所有元素

radiansdict.copy() 返回一個(gè)字典的淺復(fù)制,返回原字典的引用

radiansdict.fromkeys() 創(chuàng)建一個(gè)新字典,以序列seq中元素做字典的鍵,val為字典所有鍵對(duì)應(yīng)的初始值

radiansdict.get(key, default=None) 返回指定鍵的值,如果值不在字典中返回default值

key in dict 如果鍵在字典dict里返回true,否則返回false

radiansdict.items() 以列表返回可遍歷的(鍵, 值) 元組數(shù)組

radiansdict.keys() 以列表返回一個(gè)字典所有的鍵

radiansdict.setdefault(key, default=None) 和get()類似, 但如果鍵不存在于字典中,將會(huì)添加鍵并將值設(shè)為default

radiansdict.update(dict2) 把字典dict2的鍵/值對(duì)更新到dict里

radiansdict.values() 以列表返回字典中的所有值

pop(key[,default]) 刪除字典給定鍵 key 所對(duì)應(yīng)的值,返回值為被刪除的值。key值必須給出。 否則,返回default值。

popitem() 隨機(jī)返回并刪除字典中的一對(duì)鍵和值(一般刪除末尾對(duì))。

集合的定義

集合(set)和字典(dict)類似,它是一組 key 的集合,但不存儲(chǔ) value。集合的特性就是:key 不能重復(fù)。

>>> s = {"1","2","3"}  # 不推薦,當(dāng)元素中有字典時(shí),會(huì)報(bào)錯(cuò)
>>> s
{"2", "1", "3"}
>>> s2 = set(["1","2","3"])
>>> s2
{"2", "1", "3"}
>>> type(s)

>>> type(s2)
集合的操作

交集、并集和合集

Python中的集合與數(shù)學(xué)中的集合一樣,也有交集、并集和合集。

>>> s1 = {1,2,3,4,5}
>>> s2 = {1,2,3}
>>> s3 = {4,5}
>>> s1&s2   # 交集
{1, 2, 3}
>>> s1|s2   # 并集
{1, 2, 3, 4, 5}  
>>> s1 - s2  # 差差集
{4, 5}
>>> s3.issubset(s1)   # s3 是否為s1 的子集
True
>>> s1.issuperset(s2)  # s1 是否為 s2 的超集
True

集合的方法操作

集合中常用方法如下:

set.add(obj) 添加集合元素

set.remove(obj) 刪除集合元素

set.update(set) 合并集合

set.pop() 隨機(jī)刪除一個(gè)元素,并返回該元素

序列

序列(sequence),在Python中是一種具有相同特性的高級(jí)數(shù)據(jù)結(jié)構(gòu)的統(tǒng)稱,可以使用下標(biāo)來(lái)獲取元素和切分。到現(xiàn)在,我們學(xué)習(xí)了列表、元組、字典和集合4種高級(jí)數(shù)據(jù)結(jié)構(gòu)??梢园l(fā)現(xiàn),列表和元組在操作上有許多相同的地方。除了列表和元組,還有字符串也是序列??梢?jiàn)列表、元組、字符串為序列,字典、集合、數(shù)值為非序列。

序列的通用操作

通過(guò)索引來(lái)獲取元素值

分片操作

通過(guò)+合并元素

通過(guò)*來(lái)復(fù)制元素

支持成員運(yùn)算符

最大值、最小值和長(zhǎng)度函數(shù)支持

>>> l = [1,2,3]
>>> t = (1,2,3)
>>> s = "123"
>>> print(l[0],t[1],s[2])
1 2 3
>>> print(l[:1],t[:2],s[:-1])
[1] (1, 2) 12
>>> print(l+[4], t+(4,), s+"4" )
[1, 2, 3, 4] (1, 2, 3, 4) 1234
>>> print(l*2, t*2, s*2)
[1, 2, 3, 1, 2, 3] (1, 2, 3, 1, 2, 3) 123123
>>> print(2 in l, 2 in t, "2" in s)
True True True
>>> print(max(l), min(t), len(s))
3 1 3
可變類型和不可變類型

除了序列,Python中還可以根據(jù)數(shù)據(jù)結(jié)構(gòu)內(nèi)存中的數(shù)值是否可以被改變,分為可變類型不可變類型。

這里的可變不可變,是指內(nèi)存中的值是否可以被改變。如果是不可變類型,在對(duì)對(duì)象本身操作的時(shí)候,必須在內(nèi)存中新申請(qǐng)一塊區(qū)域(因?yàn)槔蠀^(qū)域#不可變#)。如果是可變類型,對(duì)對(duì)象操作的時(shí)候,不需要再在其他地方申請(qǐng)內(nèi)存,只需要在此對(duì)象后面連續(xù)申請(qǐng)(+/-)即可,也就是它的地址會(huì)保持不變,但區(qū)域會(huì)變長(zhǎng)或者變短。

可變類型(mutable):列表,字典,集合;

不可變類型(unmutable):數(shù)字,字符串,元組;

深copy和淺copy

在學(xué)習(xí)字典時(shí),字典有個(gè)copy,可以得到字典的副本。其他類型如何處理呢,Python提供了一個(gè)內(nèi)置的copy庫(kù)用來(lái)支持其他類型的復(fù)制。copy庫(kù)主要有2個(gè)方法,copydeepcopy分別表示淺拷貝和深拷貝。淺拷貝是新創(chuàng)建了一個(gè)跟原對(duì)象一樣的類型,但是其內(nèi)容是對(duì)原對(duì)象元素的引用。這個(gè)拷貝的對(duì)象本身是新的,但內(nèi)容不是??截愋蛄蓄愋蛯?duì)象(列表元組)時(shí),默認(rèn)是淺拷貝。

下面咱們來(lái)分析下淺拷貝和深拷貝的區(qū)別。

普通情況下,賦值只是創(chuàng)建一個(gè)變量,該變量指向值內(nèi)存地址,如下例:

n4 = n3 = n2 = n1 = "123/"Wu""

n1 = {"k1": "wu", "k2": 123, "k3": ["alex", 456]}
n2 = n1

淺拷貝,在內(nèi)存中只額外創(chuàng)建第一層數(shù)據(jù),如下圖:

import copy
n1 = {"k1": "wu", "k2": 123, "k3": ["alex", 456]}
n3 = copy.copy(n1)

深拷貝,在內(nèi)存中將所有的數(shù)據(jù)重新創(chuàng)建一份(排除最后一層,即:python內(nèi)部對(duì)字符串和數(shù)字的優(yōu)化),如下圖:

import copy
n1 = {"k1": "wu", "k2": 123, "k3": ["alex", 456]}
n4 = copy.deepcopy(n1)

圖片來(lái)源:博客地址

總結(jié)

到此,我們把Python的基本語(yǔ)法和數(shù)據(jù)結(jié)構(gòu)過(guò)了一遍。那我們來(lái)總結(jié)下,我們都學(xué)到了什么:

1、高級(jí)數(shù)據(jù)結(jié)構(gòu)及其操作:列表、元組、字典、集合、序列;

這些只是基本語(yǔ)法的組成元素。在程序運(yùn)行時(shí),可能會(huì)有多種情況,需要對(duì)這些結(jié)構(gòu)做判斷或者需要按順序讀取列表的全部元素,那么這個(gè)時(shí)候便需要邏輯處理結(jié)構(gòu)。下一章,我們來(lái)講解Python中的邏輯處理的控制流語(yǔ)法。

練習(xí)

1、現(xiàn)在有一個(gè)包含N個(gè)元素的元組或者是序列,怎樣將它里面的值解壓后同時(shí)賦值給N個(gè)變量?

>>> data = [ "ACME", 50, 91.1, (2012, 12, 21) ]
>>> name, shares, price, date = data
>>> data = [ "ACME", 50, 91.1, (2012, 12, 21) ]
>>> _, shares, price, _ = data

2、怎樣從一個(gè)集合中獲得最大或者最小的N個(gè)元素列表?

max([1,2,2,3])
min([1,2,3,4])

3、大家知道字典是無(wú)序的,如何給字典排序?

from collections import OrderedDict

d = OrderedDict()
d["foo"] = 1
d["bar"] = 2
d["spam"] = 3
d["grok"] = 4
print(d)
參考

https://github.com/jackfrued/Python-100-Days/blob/master/Day01-15/Day02/%E8%AF%AD%E8%A8%80%E5%85%83%E7%B4%A0.md

http://www.cnblogs.com/wupeiqi/articles/5433925.html

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/41953.html

相關(guān)文章

  • 史上最詳細(xì)Python學(xué)習(xí)路線-從入門到精通,只需90天

    摘要:針對(duì)的初學(xué)者,從無(wú)到有的語(yǔ)言如何入門,主要包括了的簡(jiǎn)介,如何下載,如何安裝,如何使用終端,等各種開(kāi)發(fā)環(huán)境進(jìn)行開(kāi)發(fā),中的語(yǔ)法和基本知識(shí)概念和邏輯,以及繼續(xù)深入學(xué)習(xí)的方法。 ...

    gghyoo 評(píng)論0 收藏0
  • Python入門到實(shí)踐-了解Python

    摘要:但是相對(duì)于開(kāi)發(fā)者來(lái)說(shuō)語(yǔ)言提供了更加強(qiáng)大的支持。自身的強(qiáng)類型的機(jī)制異常處理垃圾自動(dòng)收集等是其程序健壯性的重要保證??蚣艿脑O(shè)計(jì)理念也遵循了優(yōu)雅明確簡(jiǎn)單,并具有簡(jiǎn)潔易讀及可拓展性。 關(guān)于Python的發(fā)展,及Python的歷史概述我這里將不會(huì)浪費(fèi)時(shí)間和大家介紹,因?yàn)槲矣X(jué)得能夠借用搜索引擎搜索到的知識(shí)大家就竟可能的自己動(dòng)手動(dòng)腦去了解和認(rèn)知,我主要就講講Python的一些基本的特性及版本的選擇相...

    alighters 評(píng)論0 收藏0
  • 【精華分享】:轉(zhuǎn)行數(shù)據(jù)分析的一份學(xué)習(xí)清單

    摘要:數(shù)據(jù)分析的發(fā)展方向一般有商業(yè)方向,行業(yè)分析業(yè)務(wù)方向,和機(jī)器學(xué)習(xí)數(shù)據(jù)挖掘方向。機(jī)器學(xué)習(xí)的書籍推薦統(tǒng)計(jì)學(xué)習(xí)方法,機(jī)器學(xué)習(xí),機(jī)器學(xué)習(xí)實(shí)戰(zhàn)三本書。 作者:xiaoyu 微信公眾號(hào):Python數(shù)據(jù)科學(xué) 知乎:python數(shù)據(jù)分析師 上一篇主要分享了博主親身轉(zhuǎn)行數(shù)據(jù)分析的經(jīng)歷: 【從零學(xué)起到成功轉(zhuǎn)行數(shù)據(jù)分析,我是怎么做的?】 本篇繼上一篇將分享轉(zhuǎn)行數(shù)據(jù)分析的一些經(jīng)驗(yàn)和學(xué)習(xí)方法,看完這篇你將會(huì)解...

    suemi 評(píng)論0 收藏0
  • 趣味Python入門(一):初識(shí)Python

    摘要:盡管如此,還具有高級(jí)的數(shù)據(jù)類型和靈活性。它配備了大量的標(biāo)準(zhǔn)模塊,可用于程序庫(kù)。一些模塊提供如下功能通過(guò)這些很贊的特性,瞬時(shí)化身為面向過(guò)程的語(yǔ)言。開(kāi)發(fā)者可以便捷地將解釋器連接到一個(gè)使用編寫的應(yīng)用程序,并能隨時(shí)用作擴(kuò)展。下一部分會(huì)繼續(xù)分享。 【編者按】本文作者是 Abhishek Jaiswal ,擅長(zhǎng) .NET、C#、Python 等多種語(yǔ)言的技術(shù)控。本文中,作者通過(guò)活潑有趣的口吻向大家...

    sutaking 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<