導航:首頁 > 編程語言 > 映射python數據結構

映射python數據結構

發布時間:2022-04-25 17:40:44

A. python有哪些技術上的優點比其他語言好在哪兒

Python有哪些技術上的優點


1. 面向對象和函數式

從根本上講,Python是一種面向對象的語言。它的類模型支持多態、運算符重載和多重繼承等高級概念,並且以Python特有的簡潔的語法和類型為背景,OOP十分易於使用。事實上,即使你不懂這些術語,仍會發現學習Python比學習其他OOP語言要容易得多。

除了作為一種強大的代碼組織和重用手段以外,Python的OOP本質使它成為其他面向對象系統語言的理想腳本工具。例如,通過適當的粘接代碼,Python程序可以對C++、java和C#的類進行子類的定製。

OOP只是Python的一個選擇而已,這一點非常重要。即使不能立馬成為一個面向對象高手,但你同樣可以繼續深入學習。就像C++一樣,Python既支持面向對象編程也支持面向過程編程的模式。如果條件允許,其面向對象的工具可以立即派上用場。這對策略開發模式十分有用,該模式常用於軟體開發的設計階段。

除了最初的過程式(語句為基礎)和面向對象(類為基礎)的編程範式,Python在最近幾年內置了對函數式編程的支持——一個多數情況下包括生成器、推導、閉包、映射、裝飾器、匿名lambda函數和第一類函數對象的集合。這是對其本身OOP工具的補充和替代。

2. 免費

Python的使用和分發是完全免費的。就像其他的開源軟體一樣,例如,Tcl、Perl、Linux和Apache。你可以從Internet上免費獲得Python的源代碼。你可以不受限制地復制Python,或將其嵌入你的系統或者隨產品一起發布。實際上,如果你願意的話,甚至可以銷售它的源代碼。

但請別誤會:「免費」並不代表「沒有支持」。恰恰相反,Python的在線社區對用戶需求的響應和商業軟體一樣快。而且,由於Python完全開放源代碼,提高了開發者的實力,並產生了一個很大的專家團隊。

盡管研究或改變一種程序語言的實現並不是對每一個人來說都那麼有趣,但是當你知道如果需要的話可以做到這些,該是多麼的令人欣慰。你不需要去依賴商業廠商的智慧,因為最終的文檔和終極的凈土(源碼)任憑你的使用。

Python的開發是由社區驅動的,是Internet大范圍的協同合作努力的結果。Python語言的改變必須遵循一套規范而有約束力的程序(稱作PEP流程),並需要經過規范的測試系統進行徹底檢查。正是這樣才使得Python相對於其他語言和系統可以保守地持續改進。

盡管Python 2.X和Python 3.X版本之間的分裂有力並蓄意地破壞了這項傳統,但通常它仍然體現在Python的這兩個系列內部。

B. Python數據類型和數據結構。

1.1元組的創建
創建時可不指定元素的個數,相當於不定長的數組,但一旦創建就不能修改元組的長度。

tuple = (元素1, 元素2, ...)

#創建並初始化
tuple = ("apple", "banana","grape", "orange" )

#創建一個空的元組
tuple = ()

C. python中的數據結構分析

1.Python數據結構篇

數據結構篇主要是閱讀[Problem Solving with Python](Welcome to Problem Solving with Algorithms and Data Structures) [該網址鏈接可能會比較慢]時寫下的閱讀記錄,當然,也結合了部分[演算法導論](Introction to Algorithms)
中的內容,此外還有不少wikipedia上的內容,所以內容比較多,可能有點雜亂。這部分主要是介紹了如何使用Python實現常用的一些數據結構,例
如堆棧、隊列、二叉樹等等,也有Python內置的數據結構性能的分析,同時還包括了搜索和排序(在演算法設計篇中會有更加詳細的介紹)的簡單總結。每篇文
章都有實現代碼,內容比較多,簡單演算法一般是大致介紹下思想及演算法流程,復雜的演算法會給出各種圖示和代碼實現詳細介紹。

**這一部分是下
面演算法設計篇的前篇,如果數據結構還不錯的可以直接看演算法設計篇,遇到問題可以回來看數據結構篇中的某個具體內容充電一下,我個人認為直接讀演算法設計篇比
較好,因為大家時間也都比較寶貴,如果你會來讀這些文章說明你肯定有一定基礎了,後面的演算法設計篇中更多的是思想,這里更多的是代碼而已,嘿嘿。**

(1)[搜索](Python Data Structures)

簡述順序查找和二分查找,詳述Hash查找(hash函數的設計以及如何避免沖突)

(2)[排序](Python Data Structures)

簡述各種排序演算法的思想以及它的圖示和實現

(3)[數據結構](Python Data Structures)

簡述Python內置數據結構的性能分析和實現常用的數據結構:棧、隊列和二叉堆

(4)[樹總結](Python Data Structures)

簡述二叉樹,詳述二叉搜索樹和AVL樹的思想和實現

2.Python演算法設計篇

演算法設計篇主要是閱讀[Python Algorithms: Mastering Basic Algorithms in the Python Language](Python Algorithms: Mastering Basic Algorithms in the Python Language)[**點擊鏈接可進入Springer免費下載原書電子版**]之後寫下的讀書總結,原書大部分內容結合了經典書籍[演算法導論](Introction to Algorithms),
內容更加細致深入,主要是介紹了各種常用的演算法設計思想,以及如何使用Python高效巧妙地實現這些演算法,這里有別於前面的數據結構篇,部分演算法例如排
序就不會詳細介紹它的實現細節,而是側重於它內在的演算法思想。這部分使用了一些與數據結構有關的第三方模塊,因為這篇的重點是演算法的思想以及實現,所以並
沒有去重新實現每個數據結構,但是在介紹演算法的同時會分析Python內置數據結構以及第三方數據結構模塊的優缺點,也就意味著該篇比前面都要難不少,但
是我想我的介紹應該還算簡單明了,因為我用的都是比較朴實的語言,並沒有像演算法導論一樣列出一堆性質和定理,主要是對著某個問題一步步思考然後演算法就出來
了,嘿嘿,除此之外,裡面還有很多關於python開發的內容,精彩真的不容錯過!

這里每篇文章都有實現代碼,但是代碼我一般都不會分
析,更多地是分析演算法思想,所以內容都比較多,即便如此也沒有包括原書對應章節的所有內容,因為內容實在太豐富了,所以我只是選擇經典的演算法實例來介紹算
法核心思想,除此之外,還有不少內容是原書沒有的,部分是來自演算法導論,部分是來自我自己的感悟,嘻嘻。該篇對於大神們來說是小菜,請一笑而過,對於菜鳥
們來說可能有點難啃,所以最適合的是和我水平差不多的,對各個演算法都有所了解但是理解還不算深刻的半桶水的程序猿,嘿嘿。

本篇的順序按照原書[Python Algorithms: Mastering Basic Algorithms in the Python Language](Python Algorithms: Mastering Basic Algorithms in the Python Language)的章節來安排的(章節標題部分相同部分不同喲),為了節省時間以及保持原著的原滋原味,部分內容(一般是比較難以翻譯和理解的內容)直接摘自原著英文內容。

**1.
你也許覺得很多內容你都知道嘛,沒有看的必要,其實如果是我的話我也會這么想,但是如果只是歸納一個演算法有哪些步驟,那這個總結也就沒有意義了,我覺得這
個總結的亮點在於想辦法說清楚一個演算法是怎麼想出來的,有哪些需要注意的,如何進行優化的等等,採用問答式的方式讓讀者和我一起來想出某個問題的解,每篇
文章之後都還有一兩道小題練手喲**

**2.你也許還會說演算法導論不是既權威又全面么,基本上每個演算法都還有詳細的證明呢,讀演算法導論豈
不更好些,當然,你如果想讀演算法導論的話我不攔著你,讀完了感覺自己整個人都不好了別怪小弟沒有提醒你喲,嘻嘻嘻,左一個性質右一個定理實在不適合演算法科
普的啦,沒有多少人能夠堅持讀完的。但是碼農與蛇的故事內容不多喲,呵呵呵**

**3.如果你細讀本系列的話我保證你會有不少收獲的,需要看演算法導論哪個部分的地方我會給出提示的,嘿嘿。溫馨提示,前面三節內容都是介紹基礎知識,所以精彩內容從第4節開始喲,么么噠 O(∩_∩)O~**

(1)[Python Algorithms - C1 Introction](Python Algorithms)

本節主要是對原書中的內容做些簡單介紹,說明演算法的重要性以及各章節的內容概要。

(2)[Python Algorithms - C2 The basics](Python Algorithms)

**本節主要介紹了三個內容:演算法漸近運行時間的表示方法、六條演算法性能評估的經驗以及Python中樹和圖的實現方式。**

(3)[Python Algorithms - C3 Counting 101](Python Algorithms)

原書主要介紹了一些基礎數學,例如排列組合以及遞歸循環等,但是本節只重點介紹計算演算法的運行時間的三種方法

(4)[Python Algorithms - C4 Inction and Recursion and Rection](Python Algorithms)

**本節主要介紹演算法設計的三個核心知識:Inction(推導)、Recursion(遞歸)和Rection(規約),這是原書的重點和難點部分**

(5)[Python Algorithms - C5 Traversal](Python Algorithms)

**本節主要介紹圖的遍歷演算法BFS和DFS,以及對拓撲排序的另一種解法和尋找圖的(強)連通分量的演算法**

(6)[Python Algorithms - C6 Divide and Combine and Conquer](Python Algorithms)

**本節主要介紹分治法策略,提到了樹形問題的平衡性以及基於分治策略的排序演算法**

(7)[Python Algorithms - C7 Greedy](Python Algorithms)

**本節主要通過幾個例子來介紹貪心策略,主要包括背包問題、哈夫曼編碼和最小生成樹等等**

(8)[Python Algorithms - C8 Dynamic Programming](Python Algorithms)

**本節主要結合一些經典的動規問題介紹動態規劃的備忘錄法和迭代法這兩種實現方式,並對這兩種方式進行對比**

(9)[Python Algorithms - C9 Graphs](Python Algorithms)

**本節主要介紹圖演算法中的各種最短路徑演算法,從不同的角度揭示它們的內核以及它們的異同**

D. python常見數據類型

一,python整數類型所表示的數據。

1,一般用以表示一類數值:所有正整數,0和負整數;

2,整型作為最常用的,頻繁參與計算的數據類型,在python3.5中解釋器會自動在內存中創建-5-3000之間的(包含5,不包含3000)整型對象,也就是說在該范圍內,相等都是同一個已經創建好的整型對象。范圍之外的即使相等也表示不同對象,該特性隨python版本而改變,不要過於依賴。

3,bool型繼承了int型,他是int的子類。

4,Python2中有長整型long,數值范圍更大,在python3中已取消,所有整型統一由int表示。

5,參與所有數值計算,數學運算,科學計算。這也是所有編程語言都有的數據類型,因為編程語言生而需要模擬人的思維,藉助數學方式,自動計算、更好的解決大量重復性的事務,因此數值類型、整數類型在編程語言中不可或缺。

6,支持二進制(0b\0B開頭),十進制,八進制(0o\0O),十六進制(0x\0X)

二,python整數和浮點型支持常規的數值運算

整數和浮點數都可參與的運算:+ - * / %(取余) //(整除) **(冪)

Python字元型:

python字元型表示的數據:
python3支持Unicode編碼,由字母、數字和符號組成的形式就叫字元串,更接近或者相同與人們文字元號表示,因此在信息表示和傳遞時它也是最受認可的形式。在程序編寫中也是非常常用,對應的可操作的方法也很多,很有意思。
字元串不可被修改,可以拼接等方法創建新字元串對象;
支持分片和下標操作;a[2:]
支持+拼接,*重復操作和成員關系in/not in;
表示形式:用單引號雙引號包含起來的符號;a = str(『sdfsdfsdf』) 或 r』\t\nabcd』 原始字元,Bytes:b』abcd』;
6,字元串屬於不可變數據類型,內部機制為了節省空間,相同的兩個字元串表示相同的一個對象。a = 『python』 b = 『python』 a is b :True

二, 字元串支持的運算方法

1,capitalize() :首字母大寫後邊的字母小寫 a = 『abcd』 b = a.capitalize() b:Abcd

2,casefold() lower():字母轉換為全小寫

3,center(width,fillchar) :居中,width填補的長度;fillchar添加的字元

a = a.center(10,』_』) //』____abcd____』 默認無fillchar填充空格

4,count(sub,star,end) :字母計數:sub要查詢的字元

5,encode(encoding=』utf-8』,errors=』strict』) 設置編碼

Errors :設置錯誤類型

6,endswith(suffix,star,end) : 若以suffix結尾返回True

7,expandtabs(8) :設置字元串中tab按鍵符的空格長度:』\tabcde』

8,find(sub,star,end) : 返回指定范圍內的字元串下標,未找到返回-1

9,index(sub,star,end) :返回指定范圍字元串下標未找到拋出異常

10,isalnum() :判斷字元串是否是字母或數字,或字母和數字組合

11,isalpha() :判斷是否全是字母

12,isdecimal() :判斷字元串是否是十進制數值

13,isdigit() :判斷字元串是否是數字

14,isidentifier() :判斷字元串中是否包含關鍵字

15,islower() :判斷是否全小寫

16,isnumeric() :判斷全是數字

17,isspace() :判斷是否是空格

18,isupper() 判斷是否大寫

19,istitle() :判斷是否首字母大寫

20,join(iterable) :把可迭代對象用字元串進行分割:a.join(『123』)

21,ljust(width,fillchar);rjust() :左對齊右對齊

22, upper() :將字元串改為大寫

23,split(sep=None,maxsplit=-1) :分割一個字元串,被選中字元在字元串中刪除

『ab1cd1efg』.split(『1』) :[『ab』,』cd』,』efg』]

三,字元串格式化:按照規格輸出字元串

format(*args,**kwargs) :args位置參數,kwargs關鍵字參數

『{0:.1f}』.format(123.468) :格式化參數,小數點後保留1位四捨五入

四,字元串操作符%

1,%s :格式化字元串 『abcd%sdef』%』dddd』

2,%d:格式化整數

3,%o格式化無符號八進制

4,%x格式化無符號十六進制

5,%f格式化定點數

6, %e: 科學計數法格式化定點數

7,%g 根據值大小自動選%f,%e

8, %G E X :大寫形式

五,格式化輔助命令

m.n :m最小總寬度,n小數點後位數:』%12.4f』%23456.789

六,轉義字元:字元串前r避免轉義:r』\nhello\thi』

\n:換行符

\t:橫向製表符

\':'

\":"

\b:退格符

\r:回車

\v:縱向製表符

\f:換頁符

\o,\x:八進制和十六進制

\0:空字元串

Python列表list

一,Python的列表list類型表示的數據:

Python列表在cpython中被解釋為長度可變的數組,用其他對象組成的連續數組。

列表中元素可以是相同或不同的數據類型;
當列表元素增加或刪除時,列表對象自動進行擴展或收縮內存,保證元素之間沒有縫隙,總是連續的。
Python中的列表是一個序列,也是一個容器類型
創建列表:a = []; b = [1,』python』]; c = list(); d = list((1,3,4,5))
支持切片操作list[start,stop,step]
python列表常用方法
1,append添加單個元素:list.append(object); //a.append(『python』)

2,extend添加可迭代對象: list.extend(iterable); //a.extend(『abcde』/[1,2,3])

3,insert 插入元素:list.insert(index,object): 在index下標前插入元素//a.insert(2,』python』)

4,clear 清空所有元素:list.clear() //a.clear()

5,pop 刪除並返回一個元素:list.pop(index) //默認刪除默認一個元素

remove 刪除指定元素:list.remove(v) ,v元素不存在報錯 //a.remove(『c』)
7,count 返回這個值在列表中數量:list.count(value)

8, 淺拷貝一個新列表:list.()

9,sort:排序list.sort(reverse=False/True) :默認升序

排序函數:sorted(list)

10,reverse: 原地翻轉:list.reverse()

11,index(value,star,stop) :指定范圍內該值下標:list.index(2,0,5)

列表元素訪問:
下標訪問:list[1]
For循環遍歷
通過下標修改元素:list[2 ] = 『hello』
列表常用運算符:
1,比較運算符:從第一個元素開始對比

2,+ 拼接一個新列表:l1+ l2

3, 重復操作符:* ,多個列表拼接

成員關系操作符:in/ not in
邏輯運算符:and not or
列表常用的排序方法:
冒泡排序;選擇排序;快速排序;歸並排序

Python元組tuple

一,Python元組tuple數據類型表示的數據:

元組是受到限制的、不可改變的列表;
可以是同構也可以是異構;
元組是序列類型、是可迭代對象,是容器類型。
元組的創建: a = (1,2,3)或a=1,2,3; b = tuple(); c = tuple(iterable)
支持切片操作tuple[start,stop,step]

二,python元組常用方法

1,index(value,star,stop) :指定范圍內該值下標:tuple.index(2,0,5)

2,count(value) :值出現次數

三,支持運算:

1,比較運算符:從第一個元素開始對比

2,+ 拼接一個新元組:l1+ l2

3, 重復操作符:* ,多個元組拼接

4成員關系操作符:in/ not in

邏輯運算符:and not or
四,元組的訪問

下標操作;
For循環遍歷訪問。

Python字典類型

一,Python字典dict表示的數據:{key:value}

可根據關鍵字:鍵快速索引到對應的值;
字典是映射類型,鍵值對一一對應關系,不是序列;
字典元素是無序的;
字典是可迭代對象,是容器類型;
字典的創建:k = {}; k1={『keyword』:object}; k2 = dict();
K3 = dict(mapping); dict=(iterable)

二,字典的訪問:

通過key:k[『key』]

修改key對應的值:K[『key』] = value

For循環遍歷出來的是key;

For循環鍵值對:for I in d.items():

For 循環enumerate: for k,v in enumerate(k1):

In/not in 成員關系查詢鍵不支持查值

三,字典常用方法

get(key,de):獲取值:k.get(key,de) //若不存在則默認輸出de
pop(k,de):刪除一個鍵值對,不存在輸出de,未設置報錯;
keys() :返回字典所有key組成的序列:list(k.keys()) [1,2,3];
values():返回字典所有value組成的序列:list(k.values())
items():返回鍵值對組成的元組為元素的序列:(類set)list(k.items())
update(e):更新字典:e可是字典或兩元素組成的單位元素序列:e=[(5,6),(7,8)];
k.update(e)

clear():清空字典;
popitem()刪除某個鍵值對,若字典為空則報錯
() :淺拷貝
10, fromkeys(iterable,value=None):從可迭代對象創建字典

{}.fromkeys([1,2,3]) -----{1:None,2:None,3:None}

11,setdefault(k,d=None) :若key不存在則生成一個鍵值對

k.setdefault(『keyword』)

Python 集合set

集合表示的數據:
多個元素的無序組合,集合是無序的,集合元素是唯一的;
字典的鍵是由集合實現的;
集合是可迭代對象
集合創建:s = {1,2}; s1 = set(); s2 = set(iterable)
集合元素的訪問:
For 循環將集合所有元素全部訪問一遍,不重復

常用方法:
add(object):s.add(『hi』) 向集合添加一個元素
pop() :彈棧,集合為空則報錯:刪除任意一個元素;
clear():清空集合,返回一個空集合對象;
remove(object):刪除一個元素,不存在和報錯:s.remove(『hi』)
update(集合):更新另一個集合,元素不存在則不更新;
() :淺拷貝
集合的運算:
交集:s1&s2;
差集,補集:s1-s2;
並集:s1|s2;
Issubset():判斷是否是子集:s1.issubset(s2) s1是否s2的集合子集
Issuperset():判斷是否是父集:s1.issuperset()
不可變集合:
Frozenset():返回一個空的不可變集合對象

Frozenset(iterable):

S = frozenset(iterable)

Python序列類型共同特性

一,序列類型共同特性

python序列類型有:str字元串,list列表,tuple元組
都支持下標索引,切片操作;
下標都是從0開始,都可通過下標進行訪問;
擁有相同的操作符
二,支持的函數:

len(obj):返回對象長度;
list(iterable):將可迭代對象轉為列表;
tuple(iterable):將可迭代對象轉為元組;
str(ojb):將任何對象轉為字元串形式;
max(iterable): python3中元素要是同類型,python2中元素可異構:max([『a』,1])
min(iterable):和max類似;
sum(iterable,star=0),求可迭代對象和,默認star為0,元素不能為字元串
sorted(iterable,key=None,reverse=False)
s=[(『a』,3),(『b』,2),(『c』,9)]

sorted(s,key=lambda s:s[1]) //按照數字排序

reversed(sequence):翻轉序列,返回迭代器
enumerate(iterable):返回enumerate對象,其元素都是一個元組(下標,值)
zip(iter1,iter2): zip([1,2],[3,4]) ----[(1,3),(2,4)]

序列類型的切片操作:

Slice:

L[index]; 訪問某個元素;

L[1:4]; 區間

L[star:stop:step]; 設置步長取區間元素

E. python 如何表示數據結構

Python中最基本的數據結構。序列中的每個元素都分配一個數字 - 它的位置,或索引,第一個索引是0,第二個索引是1,依此類推
列表
1、定義列表,取出列表中的值

1

1 names = [] #定義空列表 2 names = ['a','b','c'] #定義一個非空列表 3 4 # 取出列表中的值 5 6 >>> names = ['a','b','c'] 7 >>> names[0] 8 'a' 9 >>> names[1]10 'b'11 >>> names[2]12 'c'13 >>> names[-1]#倒著取最後一個值14 'c'

2、切片

1

1 >>> names = ['a','b','c','d'] # 列表的下標值是從0開始取值的 2 >>> names[1:3] #取1到3之間的元素,包括1,不包括3 3 ['b', 'c'] 4 >>> names[1:-1] #取1到-1之間的元素,包括1,不包括-1 5 ['b', 'c'] 6 >>> names[0:3] 7 ['a', 'b', 'c'] 8 >>> names[:3] #從頭開始取,0可以省略,效果等同於names[0:3] 9 ['a', 'b', 'c']10 >>> names[3:] #想取到最後一個值,必須不能寫-1,只能這么寫11 ['d']12 >>> names[0::2] #後面的2表示:每隔一個元素就取一個13 ['a', 'c']14 >>> names[::2] #從頭開始0可以省略,效果跟上一句一樣15 ['a', 'c']

切片小結:
①序列始終都是從左向右切片的,不能是從右向左
①列表切片時,起始位的元素是包括的,結束位的元素是不包括(又叫顧頭不顧尾),最後一個位置表示步長(names[開始位:結束位:步長])
②如果從0位置取值,0可以省略
③想取最後一個值時,結束位不能是-1,因為結束位的元素不包括,所以只能留空

F. Python中內置的數據結構都有什麼

python中常見的結構有對象(object)、數組、元組、series以及普通變數。衍生包常見對象有numpy中的narray、pandas中的dataframe等。python中沒有區分字元串、整形數字、字元、浮點型的變數,統一都可以直接賦值。比如a="skkk",a=1,a=1.2222等;數組為a=[1,2,3,4];元組也稱字典類型為a={1:2,2:3}。

G. python的數據結構

{
u'603993.XSHG': {
'high': array([ 7.05, 6.73]),
'close': array([ 6.89, 6.2 ]),
'low': array([ 6.7, 6.2])
}
}
最外層是一個dict,然後嵌套了一個dict,最後裡面dict的key是字元串,value是一個數組。

H. Python 數據結構

python的切片操作。
http://www..com/s?wd=python+%C7%D0%C6%AC
這一塊我也不是很熟練。

I. 有哪些用 Python 語言講演算法和數據結構的書

Python常見數據結構整理

Python中常見的數據結構可以統稱為容器(container)。序列(如列表和元組)、映射(如字典)以及集合(set)是三類主要的容器。

一、序列(列表、元組和字元串)

序列中的每個元素都有自己的編號。Python中有6種內建的序列。其中列表和元組是最常見的類型。其他包括字元串、Unicode字元串、buffer對象和xrange對象。下面重點介紹下列表、元組和字元串。

1、列表

列表是可變的,這是它區別於字元串和元組的最重要的特點,一句話概括即:列表可以修改,而字元串和元組不能。

(1)、創建

通過下面的方式即可創建一個列表:

1
2
3
4
list1=['hello','world']
print list1
list2=[1,2,3]
print list2
輸出:
['hello', 'world']
[1, 2, 3]

可以看到,這中創建方式非常類似於javascript中的數組。

(2)、list函數

通過list函數(其實list是一種類型而不是函數)對字元串創建列表非常有效:

1
2
list3=list("hello")
print list3
輸出:

['h', 'e', 'l', 'l', 'o']

2、元組

元組與列表一樣,也是一種序列,唯一不同的是元組不能被修改(字元串其實也有這種特點)。

(1)、創建

1
2
3
4
5
6
t1=1,2,3
t2="jeffreyzhao","cnblogs"
t3=(1,2,3,4)
t4=()
t5=(1,)
print t1,t2,t3,t4,t5
輸出:

(1, 2, 3) ('jeffreyzhao', 'cnblogs') (1, 2, 3, 4) () (1,)

從上面我們可以分析得出:

a、逗號分隔一些值,元組自動創建完成;

b、元組大部分時候是通過圓括弧括起來的;

c、空元組可以用沒有包含內容的圓括弧來表示;

d、只含一個值的元組,必須加個逗號(,);

(2)、tuple函數

tuple函數和序列的list函數幾乎一樣:以一個序列(注意是序列)作為參數並把它轉換為元組。如果參數就算元組,那麼該參數就會原樣返回:

1
2
3
4
5
6
7
8
t1=tuple([1,2,3])
t2=tuple("jeff")
t3=tuple((1,2,3))
print t1
print t2
print t3
t4=tuple(123)
print t45
輸出:

(1, 2, 3)
('j', 'e', 'f', 'f')
(1, 2, 3)

Traceback (most recent call last):
File "F:\Python\test.py", line 7, in <mole>
t4=tuple(123)
TypeError: 'int' object is not iterable

3、字元串

(1)創建

1
2
3
4
5
str1='Hello world'
print str1
print str1[0]
for c in str1:
print c
輸出:
Hello world
H
H
e
l
l
o

w
o
r
l
d

(2)格式化

字元串格式化使用字元串格式化操作符即百分號%來實現。

1
2
str1='Hello,%s' % 'world.'
print str1
格式化操作符的右操作數可以是任何東西,如果是元組或者映射類型(如字典),那麼字元串格式化將會有所不同。

1
2
3
4
5
6
strs=('Hello','world') #元組
str1='%s,%s' % strs
print str1
d={'h':'Hello','w':'World'} #字典
str1='%(h)s,%(w)s' % d
print str1
輸出:

Hello,world
Hello,World

注意:如果需要轉換的元組作為轉換表達式的一部分存在,那麼必須將它用圓括弧括起來:

1
2
str1='%s,%s' % 'Hello','world'
print str1
輸出:

Traceback (most recent call last):
File "F:\Python\test.py", line 2, in <mole>
str1='%s,%s' % 'Hello','world'
TypeError: not enough arguments for format string

如果需要輸出%這個特殊字元,毫無疑問,我們會想到轉義,但是Python中正確的處理方式如下:

1
2
str1='%s%%' % 100
print str1
輸出:100%

對數字進行格式化處理,通常需要控制輸出的寬度和精度:

1
2
3
4
5
6
7
from math import pi
str1='%.2f' % pi #精度2
print str1
str1='%10f' % pi #欄位寬10
print str1
str1='%10.2f' % pi #欄位寬10,精度2
print str1
輸出:

3.14
3.141593
3.14

字元串格式化還包含很多其他豐富的轉換類型,可參考官方文檔。

Python中在string模塊還提供另外一種格式化值的方法:模板字元串。它的工作方式類似於很多UNIX Shell里的變數替換,如下所示:

1
2
3
4
from string import Template
str1=Template('$x,$y!')
str1=str1.substitute(x='Hello',y='world')
print str1
輸出:

Hello,world!

如果替換欄位是單詞的一部分,那麼參數名稱就必須用括弧括起來,從而准確指明結尾:

1
2
3
4
from string import Template
str1=Template('Hello,w${x}d!')
str1=str1.substitute(x='orl')
print str1
輸出:

Hello,world!

如要輸出符,可以使用$輸出:

1
2
3
4
from string import Template
str1=Template('$x$$')
str1=str1.substitute(x='100')
print str1
輸出:100$

除了關鍵字參數之外,模板字元串還可以使用字典變數提供鍵值對進行格式化:

1
2
3
4
5
from string import Template
d={'h':'Hello','w':'world'}
str1=Template('$h,$w!')
str1=str1.substitute(d)
print str1
輸出:

Hello,world!

除了格式化之外,Python字元串還內置了很多實用方法,可參考官方文檔,這里不再列舉。

4、通用序列操作(方法)

從列表、元組以及字元串可以「抽象」出序列的一些公共通用方法(不是你想像中的CRUD),這些操作包括:索引(indexing)、分片(sliceing)、加(adding)、乘(multiplying)以及檢查某個元素是否屬於序列的成員。除此之外,還有計算序列長度、最大最小元素等內置函數。

(1)索引

1
2
3
4
5
6
str1='Hello'
nums=[1,2,3,4]
t1=(123,234,345)
print str1[0]
print nums[1]
print t1[2]
輸出

H
2
345

索引從0(從左向右)開始,所有序列可通過這種方式進行索引。神奇的是,索引可以從最後一個位置(從右向左)開始,編號是-1:

1
2
3
4
5
6
str1='Hello'
nums=[1,2,3,4]
t1=(123,234,345)
print str1[-1]
print nums[-2]
print t1[-3]
輸出:

o
3
123

(2)分片

分片操作用來訪問一定范圍內的元素。分片通過冒號相隔的兩個索引來實現:

1
2
3
4
5
6
7
8
nums=range(10)
print nums
print nums[1:5]
print nums[6:10]
print nums[1:]
print nums[-3:-1]
print nums[-3:] #包括序列結尾的元素,置空最後一個索引
print nums[:] #復制整個序列
輸出:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4]
[6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[7, 8]
[7, 8, 9]

不同的步長,有不同的輸出:

1
2
3
4
5
6
7
8
nums=range(10)
print nums
print nums[0:10] #默認步長為1 等價於nums[1:5:1]
print nums[0:10:2] #步長為2
print nums[0:10:3] #步長為3

##print nums[0:10:0] #步長為0
print nums[0:10:-2] #步長為-2
輸出:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 2, 4, 6, 8]
[0, 3, 6, 9]
[]

(3)序列相加

1
2
3
4
5
6
7
str1='Hello'
str2=' world'
print str1+str2
num1=[1,2,3]
num2=[2,3,4]
print num1+num2
print str1+num1
輸出:

Hello world
[1, 2, 3, 2, 3, 4]

Traceback (most recent call last):
File "F:\Python\test.py", line 7, in <mole>
print str1+num1
TypeError: cannot concatenate 'str' and 'list' objects

(4)乘法

1
2
3
4
5
6
print [None]*10
str1='Hello'
print str1*2
num1=[1,2]
print num1*2
print str1*num1
輸出:

[None, None, None, None, None, None, None, None, None, None]

HelloHello
[1, 2, 1, 2]

Traceback (most recent call last):
File "F:\Python\test.py", line 5, in <mole>
print str1*num1
TypeError: can't multiply sequence by non-int of type 'list'

(5)成員資格

in運算符會用來檢查一個對象是否為某個序列(或者其他類型)的成員(即元素):

1
2
3
4
5
str1='Hello'
print 'h' in str1
print 'H' in str1
num1=[1,2]
print 1 in num1
輸出:

False
True
True

(6)長度、最大最小值

通過內建函數len、max和min可以返回序列中所包含元素的數量、最大和最小元素。

1
2
3
4
5
6
7
8
str1='Hello'
print len(str1)
print max(str1)
print min(str1)
num1=[1,2,1,4,123]
print len(num1)
print max(num1)
print min(num1)
輸出:

5
o
H
5
123
1

二、映射(字典)

映射中的每個元素都有一個名字,如你所知,這個名字專業的名稱叫鍵。字典(也叫散列表)是Python中唯一內建的映射類型。

1、鍵類型

字典的鍵可以是數字、字元串或者是元組,鍵必須唯一。在Python中,數字、字元串和元組都被設計成不可變類型,而常見的列表以及集合(set)都是可變的,所以列表和集合不能作為字典的鍵。鍵可以為任何不可變類型,這正是Python中的字典最強大的地方。

1
2
3
4
5
6
7
8
list1=["hello,world"]
set1=set([123])
d={}
d[1]=1
print d
d[list1]="Hello world."
d[set1]=123
print d
輸出:

{1: 1}

Traceback (most recent call last):
File "F:\Python\test.py", line 6, in <mole>
d[list1]="Hello world."
TypeError: unhashable type: 'list'

2、自動添加

即使鍵在字典中並不存在,也可以為它分配一個值,這樣字典就會建立新的項。

3、成員資格

表達式item in d(d為字典)查找的是鍵(containskey),而不是值(containsvalue)。

Python字典強大之處還包括內置了很多常用操作方法,可參考官方文檔,這里不再列舉。

思考:根據我們使用強類型語言的經驗,比如C#和Java,我們肯定會問Python中的字典是線程安全的嗎?

三、集合

集合(Set)在Python 2.3引入,通常使用較新版Python可直接創建,如下所示:

strs=set(['jeff','wong','cnblogs'])
nums=set(range(10))
看上去,集合就是由序列(或者其他可迭代的對象)構建的。集合的幾個重要特點和方法如下:

1、副本是被忽略的

集合主要用於檢查成員資格,因此副本是被忽略的,如下示例所示,輸出的集合內容是一樣的。

1
2
3
4
5
set1=set([0,1,2,3,0,1,2,3,4,5])
print set1

set2=set([0,1,2,3,4,5])
print set2
輸出如下:

set([0, 1, 2, 3, 4, 5])
set([0, 1, 2, 3, 4, 5])

2、集合元素的順序是隨意的

這一點和字典非常像,可以簡單理解集合為沒有value的字典。

1
2
strs=set(['jeff','wong','cnblogs'])
print strs
輸出如下:

set(['wong', 'cnblogs', 'jeff'])

J. Python中如何實現基本的數據結構

要學的,python只是繼承了list,dict,set等常用的數據結構。一般情況只要將幾種內置對象組合就可以。如果你要實現復雜的數據結構還是要自己實現。

閱讀全文

與映射python數據結構相關的資料

熱點內容
機明自動編程軟體源碼 瀏覽:325
php埠號設置 瀏覽:540
phperegreplace 瀏覽:319
androidgridview翻頁 瀏覽:537
ssh協議編程 瀏覽:634
如何開我的世界電腦伺服器地址 瀏覽:861
玄關pdf 瀏覽:609
程序員學習論壇 瀏覽:940
程序員的毒雞湯怎麼做 瀏覽:547
安卓怎麼降級軟體到手機 瀏覽:281
雲與伺服器入門書籍推薦產品 瀏覽:636
delphi編程助手 瀏覽:761
電腦遇到伺服器問題怎麼辦 瀏覽:515
加工中心編程結束方法 瀏覽:295
了解什麼是web伺服器 瀏覽:139
面向對象的編程的基本特徵 瀏覽:717
php定時執行任務linux 瀏覽:787
php數組中刪除元素 瀏覽:724
螢石雲伺服器視頻 瀏覽:269
防火牆配置伺服器熱備的虛擬地址 瀏覽:189