Python支持面向對象的編程範式,這意味着Python把數據當作解決問題的關鍵. 在Python中,相似其餘的面向對象的編程語言, 咱們定義一個類,用來描述數據是什麼 (狀態) 和數據能作些什麼 (行爲). 類和抽象數據類型類似,由於一個類的用戶只看數據項的狀態和行爲. 數據項在面向對象編程中被稱爲對象. 對象是類的實例.html
本文地址:http://www.cnblogs.com/archimedes/p/python-datastruct-algorithm-basedatatypes.html,轉載請註明源地址。python
咱們從原子數據類型開始咱們的回顧. Python有兩種主要的內建數據類:int
和float
. 標準的算術操做:+, -, *, /, and ** (冪運算), 可使用括號改變運算優先級.其餘很是有用的操做符爲取餘運算%, 和整數除法運算//. 注意:當兩個整數相除的時候,結果是一個浮點型數. 整數除法操做返回截斷小數以後的整數部分.算法
boolean類型,由Python的 bool
類提供實現,在表示真值的時候很是有用. 對於一個boolean對象而言,只有兩個值:True
and False,標準的
boolean類型操做: and
, or
, 和not
.shell
Boolean數據對象也被用於表示比較運算符的結果,好比:相等 (==) 和大於 (>). 另外, 關係運算符和邏輯運算符能夠組合在一塊兒來解決複雜的邏輯問題. 表1 展現了邏輯關係操做,後面還展現了相關的例子.編程
操做名 | 操做符 | 說明 |
---|---|---|
小於 | < | 小於操做符 |
大於 | > | 大於操做符 |
小於等於 | <= | 小於等於操做符 |
大於等於 | >= | 大於等於操做符 |
等於 | == | 等於操做符 |
不等於 | != | 不等於操做符 |
邏輯與 | and | 兩個同時爲True時候才爲True |
邏輯或 | or | 兩個中至少有一個爲True,結果爲True |
邏輯非 | not | 否認, False 變爲True, True 變爲False |
示例代碼:數據結構
標識符以名字的形式被用於程序語言. 在Python中, 標識符以字母或一條下劃線開始,大小寫敏感且能夠是任意長度.記住常用變量來表達你的意思,使得你的代碼更加簡單的被閱讀和理解.一個 Python 變量被建立一旦被賦予左值. 賦值語句提供了一種聯繫變量和值的方法. 變量保持一個指向數據區域的引用,並非數據自己. 看下面的代碼:app
做爲數據類型和布爾類型的補充, Python還有一些內建的集合類型. Lists, strings, 和 tuples(元組)都是有序集合,很是相似普通的結構可是有些特殊的不一樣點,因此必須理解它們這樣才能正確地使用它們. Sets 和 dictionaries 是無序集合.編程語言
list 是一個空的或多個指向Python數據對象類型的引用. Lists 一般寫爲用方括號包含的一些用逗號分隔的值. 空表表示爲 [ ]
. Lists內部的元素能夠是不一樣的數據對象, 下面的例子展現了一個list中不一樣的數據類型.函數
當給list賦值的時候, list被返回. 可是, 想在 list上做操, 就須要將其賦值給一個對象.post
lists 被認爲是連續的序列, 它們支持一些可用於其餘序列的通用操做. 表2 展現了這些操做,接着給出一些例子來進一步說明它們的應用.
操做名 | 操做符 | 解釋 |
---|---|---|
索引 | [ ] | 訪問 sequence中的元素 |
鏈接 | + | 合併sequences |
重複 | * | 連續重複次數 |
成員 | in | 判斷元素是否在quence中 |
長度 | len | 計算sequence的長度 |
分片 | [ : ] | 給sequence分片 |
注意到lists (序列)的索引從0開始. 取片操做, myList[1:3], 返回list的數據項,起始於1結束但不包含3.有時, 你想初始化一個list. 可使用重複來快速的完成. 例如,
經過下面的例子很容易理解:
Lists 提供大量用於構建數據結構的方法.表3 提供概要. 接着是一些例子.
方法名 | 應用 | 說明 |
---|---|---|
append |
alist.append(item) |
在list的結尾添加一個項 |
insert |
alist.insert(i,item) |
在list的第i個位置插入一個項 |
pop |
alist.pop() |
移除並返回list中的最後一個元素 |
pop |
alist.pop(i) |
移除並返回list中的第i個位置的元素 |
sort |
alist.sort() |
排序修改list |
reverse |
alist.reverse() |
將list倒序操做 |
del |
del alist[i] |
刪除第i個位置的元素 |
index |
alist.index(item) |
返回第一次出現 item 的索引 |
count |
alist.count(item) |
返回出現 item 的次數 |
remove |
alist.remove(item) |
刪除第一次出現的 item |
list中的方法示例代碼:
即便像整型這樣的對象也能夠調用方法以下:
上面的代碼中咱們使整型對象 54
執行 add
方法(稱爲 __add__
) 而且傳遞 21
做爲被加數. 結果是它們的和, 75
. 固然, 咱們一般寫做 54+21
. 在後面還將詳細介紹這個方法.
一個Python常常用來鏈接lists的常見函數: range
函數.range
產生了一個範圍內的對象. 經過使用 list
函數, 能夠看到list中指定範圍內的值,以下面的代碼所示:
Strings 包含0個或多個數字或其餘的字符的連續的順序集合. 咱們稱這些爲字母, 數字和其餘的符號字符.
既然strings是序列, all of the 上面提到的序列的全部操做均可以使用. 然而, strings 還有一些自身的方法, 如表 4所示. 例如,
方法名 | 應用 | 說明 |
---|---|---|
center |
astring.center(w) |
返回一個以 w 爲寬度的居中字符串 |
count |
astring.count(item) |
返回字符串中包含 item 的個數 |
ljust |
astring.ljust(w) |
返回一個以 w 爲寬度的左對齊字符串 |
lower |
astring.lower() |
返回string的小寫形式 |
rjust |
astring.rjust(w) |
返回一個以 w 爲寬度的右對齊字符串
|
find |
astring.find(item) |
返回第一次出現 item 的索引 |
split |
astring.split(schar) |
將string以 schar 爲分隔符劃分爲子串 |
lists 和 strings的主要區別是 lists 能夠修改可是 strings 不能修改. 例如, 你能夠經過索引和賦值改變項的值. 對於string不能發生改變.
Tuples(元組)很是相似於lists,由於它們的元素均可以是不一樣類型的.不一樣的是tuple是不能夠變的, 就像 string. Tuples是一組用圓括號包圍的用逗號分隔的值. 做爲序列,你可使用上面介紹的全部方法. 例如:
然而,假如你試圖修改元組中的元素,就會出錯,以下所示.
set 是一個包含0個或多個不可變Python對象的無序集合. 空set 表示爲 set()
. Sets 的元素類型多樣.
操做名 | 操做 | 說明 |
---|---|---|
成員 | in | 判斷成員 |
長度 | len | 返回set中的元素個數 |
| |
aset | otherset |
返回一個新的set,做爲並集 |
& |
aset & otherset |
返回一個新的set,做爲交集 |
- |
aset - otherset |
返回一個新的set,做爲差集 |
<= |
aset <= otherset |
判斷第一個集合是否爲第二個集合的子集 |
Sets 提供的方法相似於數學中的集合. 表 6 提供了概要. 例子以下所示:
方法名 | 應用 | 說明 |
---|---|---|
union |
aset.union(otherset) |
返回一個新的set,元素由兩個set的並集組成 |
intersection |
aset.intersection(otherset) |
返回一個新的set ,元素由兩個set的交集組成 |
difference |
aset.difference(otherset) |
返回一個新的set,元素由兩個set的差組成 |
issubset |
aset.issubset(otherset) |
判斷第一個set中的全部元素是否是在第二個set中 |
add |
aset.add(item) |
向set中添加元素 |
remove |
aset.remove(item) |
從set中刪除元素 |
pop |
aset.pop() |
從set中刪除任意元素 |
clear |
aset.clear() |
將set中全部元素刪除 |
Dictionaries(字典)既有方法又有操做. 表7 和 表 8 描述了它們.
操做符 | 應用 | 說明 |
---|---|---|
[] |
myDict[k] |
返回鍵爲 k 的值,不然發生錯誤 |
in |
key in adict |
當key在字典中的時候返回 True 不然返回 False |
del |
del adict[key] |
刪除全部的 dictionary 元素 |
方法名 | 應用 | 說明 |
---|---|---|
keys |
adict.keys() |
返回dictionary中的key |
values |
adict.values() |
返回dictionary中的值 |
items |
adict.items() |
返回字典中的全部鍵-值對 |
get |
adict.get(k) |
返回 k 對應的值,不然返回 None |
get |
adict.get(k,alt) |
返回 k 對應的值,不然返回 alt |