Python支持面向對象的編程范式,這意味著Python把數據看成解決問題的關鍵. 在Python中,類似其他的面向對象的編程語言, 我們定義一個類,用來描述數據是什么 (狀態) 和數據能做些什么 (行為). 類和抽象數據類型相似,因為一個類的用戶只看數據項的狀態和行為. 數據項在面向對象編程中被稱為對象. 對象是類的實例.
本文地址:http://m.survivalescaperooms.com/archimedes/p/python-datastruct-algorithm-basedatatypes.html,轉載請注明源地址。
我們從原子數據類型開始我們的回顧. Python有兩種主要的內建數據類:int和float. 標準的算術操作:+, -, *, /, and ** (冪運算), 可以使用括號改變運算優先級.其他非常有用的操作符為取余運算%, 和整數除法運算//. 注意:當兩個整數相除的時候,結果是一個浮點型數. 整數除法操作返回截斷小數之后的整數部分.
>>> PRint 2+3*414>>> print (2+3)*420>>> print 2**101024>>> print 6/32>>> print 7/32>>> print 7//32>>> print 7%31>>> print 3/60>>> print 3//60>>> print 3%63>>> print 2**1001267650600228229401496703205376
boolean類型,由Python的 bool 類提供實現,在表示真值的時候非常有用. 對于一個boolean對象而言,只有兩個值:True and False,標準的boolean類型操作: and, or, 和not.
>>> TrueTrue>>> FalseFalse>>> False or TrueTrue>>> not (False or True)False>>> True and TrueTrue
Boolean數據對象也被用于表示比較運算符的結果,比如:相等 (==) 和大于 (>). 另外, 關系運算符和邏輯運算符可以組合在一起來解決復雜的邏輯問題. 表1 展示了邏輯關系操作,后面還展示了相關的例子.
| 操作名 | 操作符 | 說明 |
|---|---|---|
| 小于 | < | 小于操作符 |
| 大于 | > | 大于操作符 |
| 小于等于 | <= | 小于等于操作符 |
| 大于等于 | >= | 大于等于操作符 |
| 等于 | == | 等于操作符 |
| 不等于 | != | 不等于操作符 |
| 邏輯與 | and | 兩個同時為True時候才為True |
| 邏輯或 | or | 兩個中至少有一個為True,結果為True |
| 邏輯非 | not | 否定, False 變為True, True 變為False |
示例代碼:
>>> print(5==10)False>>> print(10 > 5)True>>> print((5 >= 1) and (5 <= 10))True
標識符以名字的形式被用于程序語言. 在Python中, 標識符以字母或一條下劃線開始,大小寫敏感且可以是任意長度.記住經常使用變量來表達你的意思,使得你的代碼更加簡單的被閱讀和理解.一個 Python 變量被創建一旦被賦予左值. 賦值語句提供了一種聯系變量和值的方法. 變量保持一個指向數據區域的引用,并不是數據本身. 看下面的代碼:
>>> theSum = 0>>> theSum0>>> theSum += 1>>> theSum1>>> theSum = True>>> theSumTrue
作為數據類型和布爾類型的補充, Python還有一些內建的集合類型. Lists, strings, 和 tuples(元組)都是有序集合,非常類似普通的結構但是有些特殊的不同點,所以必須理解它們這樣才能正確地使用它們. Sets 和 dictionaries 是無序集合.
list 是一個空的或多個指向Python數據對象類型的引用. Lists 通常寫為用方括號包含的一些用逗號分隔的值. 空表表示為 [ ]. Lists內部的元素可以是不同的數據對象, 下面的例子展示了一個list中不同的數據類型.
>>> [1,3,True,6.5][1, 3, True, 6.5]>>> myList = [1,3,True,6.5]>>> myList[1, 3, True, 6.5]
當給list賦值的時候, list被返回. 但是, 想在 list上作操, 就需要將其賦值給一個對象.
lists 被認為是連續的序列, 它們支持一些可用于其他序列的通用操作. 表2 展示了這些操作,接著給出一些例子來進一步說明它們的應用.
| 操作名 | 操作符 | 解釋 |
|---|---|---|
| 索引 | [ ] | 訪問 sequence中的元素 |
| 連接 | + | 合并sequences |
| 重復 | * | 連續重復次數 |
| 成員 | in | 判斷元素是否在quence中 |
| 長度 | len | 計算sequence的長度 |
| 分片 | [ : ] | 給sequence分片 |
注意到lists (序列)的索引從0開始. 取片操作, myList[1:3], 返回list的數據項,起始于1結束但不包含3.有時, 你想初始化一個list. 可以使用重復來快速的完成. 例如,
>>> myList = [0]*6>>> myList[0, 0, 0, 0, 0, 0]通過下面的例子很容易理解:
>>> myList = [1,2,3,4]>>> A=[myList]*3>>> print(A)[[1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4]]>>> myList[2]=45>>> print(A)[[1, 2, 45, 4], [1, 2, 45, 4], [1, 2, 45, 4]]
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中的方法示例代碼:
>>> myList = [1024, 3, True, 6.5]>>> myList.append(False)>>> print(myList)[1024, 3, True, 6.5, False]>>> myList.insert(2, 4.5)>>> print(myList)[1024, 3, 4.5, True, 6.5, False]>>> print(myList.pop())False>>> print(myList)[1024, 3, 4.5, True, 6.5]>>> print(myList.pop(1))3>>> print(myList)[1024, 4.5, True, 6.5]>>> myList.pop(2)True>>> print(myList)[1024, 4.5, 6.5]>>> myList.sort()>>> print(myList)[4.5, 6.5, 1024]>>> myList.reverse()>>> print(myList)[1024, 6.5, 4.5]>>> print(myList.count(6.5))1>>> print(myList.index(4.5))2>>> myList.remove(6.5)>>> print(myList)[1024, 4.5]>>> del myList[0]>>> print(myList)[4.5]
即使像整型這樣的對象也可以調用方法如下:
>>> (54).__add__(21)75
上面的代碼中我們使整型對象 54 執行 add 方法(稱為 __add__ ) 并且傳遞 21 作為被加數. 結果是它們的和, 75. 當然, 我們通常寫作 54+21. 在后面還將詳細介紹這個方法.
一個Python經常用來連接lists的常見函數: range 函數.range 產生了一個范圍內的對象. 通過使用 list 函數, 可以看到list中指定范圍內的值,如下面的代碼所示:
>>> range(10)[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]>>> range(0, 10)[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]>>> list(range(10))[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]>>> range(5,10)[5, 6, 7, 8, 9]>>> list(range(5,10))[5, 6, 7, 8, 9]>>> list(range(5,10,2))[5, 7, 9]>>> list(range(10,1,-1))[10, 9, 8, 7, 6, 5, 4, 3, 2]
Strings 包含0個或多個數字或其他的字符的連續的順序集合. 我們稱這些為字母, 數字和其他的符號字符.
>>> "David"'David'>>> myName = "David">>> myName[3]'i'>>> myName * 2'DavidDavid'>>> len(myName)5
既然strings是序列, all of the 上面提到的序列的所有操作都可以使用. 然而, strings 還有一些自身的方法, 如表 4所示. 例如,
>>> myName'David'>>> myName.upper()'DAVID'>>> myName.center(10)' David '>>> myName.find('v')2>>> myName.split('v')['Da', 'id']
| 方法名 | 應用 | 說明 |
|---|---|---|
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不能發生改變.
>>> myList = [1,3,True,6.5]>>> myList[0] = 2 ** 10>>> myList[1024, 3, True, 6.5]>>> myName = 'David'>>> myName[0] = 'X'Traceback (most recent call last): File "<pyshell#81>", line 1, in <module> myName[0] = 'X'TypeError: 'str' object does not support item assignment
Tuples(元組)非常類似于lists,因為它們的元素都可以是不同類型的.不同的是tuple是不可以變的, 就像 string. Tuples是一組用圓括號包圍的用逗號分隔的值. 作為序列,你可以使用上面介紹的所有方法. 例如:
>>> myTuple = (2, True, 4.32)>>> myTuple(2, True, 4.32)>>> len(myTuple)3>>> myTuple[0]2>>> myTuple * 3(2, True, 4.32, 2, True, 4.32, 2, True, 4.32)>>> myTuple[0:2](2, True)
然而,假如你試圖修改元組中的元素,就會出錯,如下所示.
>>> myTuple[1] = falseTraceback (most recent call last): File "<pyshell#92>", line 1, in <module> myTuple[1] = falseNameError: name 'false' is not defined
set 是一個包含0個或多個不可變Python對象的無序集合. 空set 表示為 set(). Sets 的元素類型多樣.
>>> {3,6,"cat",4.3,False}set([False, 3, 4.3, 6, 'cat'])>>> mySet = {3,6,"cat",4.3,False}>>> mySetset([False, 3, 4.3, 6, 'cat'])| 操作名 | 操作 | 說明 |
|---|---|---|
| 成員 | in | 判斷成員 |
| 長度 | len | 返回set中的元素個數 |
| | aset | otherset | 返回一個新的set,作為并集 |
& | aset & otherset | 返回一個新的set,作為交集 |
- | aset - otherset | 返回一個新的set,作為差集 |
<= | aset <= otherset | 判斷第一個集合是否為第二個集合的子集 |
>>> {3,6,"cat",4.3,False}set([False, 3, 4.3, 6, 'cat'])>>> mySet = {3,6,"cat",4.3,False}>>> mySetset([False, 3, 4.3, 6, 'cat'])>>> >>> mySet = {3,6,"cat",4.3,False}>>> len(mySet)5>>> False in mySetTrue>>> "dog" in mySetFalse>>> yourSet = {3,1,"cat",4.7,False}>>> mySet | yourSetset([False, 1, 3, 6, 4.3, 'cat', 4.7])>>> mySet & yourSetset([False, 3, 'cat'])>>> mySet - yourSetset([4.3, 6])>>> mySet <= yourSetFalseSets 提供的方法類似于數學中的集合. 表 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中所有元素刪除 |
>>> mySet = {False, 4.5, 3, 6, 'cat'}>>> yourSet = {99, 3, 100}>>> mySet.union(yourSet)set([4.5, False, 3, 100, 6, 'cat', 99])>>> mySet | yourSetset([4.5, False, 3, 100, 6, 'cat', 99])>>> mySet.intersection(yourSet)set([3])>>> mySet & yourSetset([3])>>> mySet.difference(yourSet)set([4.5, False, 6, 'cat'])>>> mySet - yourSetset([4.5, False, 6, 'cat'])>>> {3, 100}.issubset(yourSet)True>>> {3, 100}<=yourSetTrue>>> mySet.add("house")>>> mySetset([4.5, False, 3, 6, 'house', 'cat'])>>> mySet.remove(4.5)>>> mySetset([False, 3, 6, 'house', 'cat'])>>> mySet.pop()False>>> mySetset([3, 6, 'house', 'cat'])>>> mySet.clear()>>> mySetset([])Dictionaries(字典)既有方法又有操作. 表7 和 表 8 描述了它們.
| 操作符 | 應用 | 說明 |
|---|---|---|
[] | myDict[k] | 返回鍵為 k 的值,否則發生錯誤 |
in | key in adict | 當key在字典中的時候返回 True 否則返回 False |
del | del adict[key] | 刪除所有的 dictionary 元素 |
>>> phoneext = {'david':1410, 'brad':1137}>>> phoneext{'brad': 1137, 'david': 1410}>>> phoneext.keys()['brad', 'david']>>> phoneext.values()[1137, 1410]>>> phoneext.items()[('brad', 1137), ('david', 1410)]>>> phoneext.get("kent")| 方法名 | 應用 | 說明 |
|---|---|---|
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 |
您還可能感興趣:
新聞熱點
疑難解答