Python的資料類型

來源:互聯網
上載者:User

標籤:

Python的資料類型包括基本的資料類型,如:整型,浮點型,字串,字串和進階資料類型,如列表,元組,字典,Set,Forzensets。

一.整型

Python可以處理任意大小的整數,包括負整數。
在python 2.x中,有兩種整數類型,一般的32位整數和長整數,長整數都是以L或者l表示,超過32位後會自動轉換為長整形。在python 3.x中,只有一種類型,沒有長度限制。

在Python 2.x中,表示八進位有兩種方式,一是和其他的程式設計語言一樣,直接在數字前加0,比如010, 另外是加0o開頭(0和小寫字母o),如0o10。在Python 3.x中,表示八進位的方式只有一種,就是0o開頭。

十六進位表示方法是以0x開頭,如0x10。

 

二.浮點數

浮點數就是小數,之所以稱為浮點數,是因為按照科學記號標記法表示時,一個浮點數的小數點位置是可變的,比如,1.23×10^9和12.3×10^8是相等的。浮點數可以用數學寫法,如1.233.14-9.01,等等。但是對於很大或很小的浮點數,就必須用科學計數法表示,把10用e替代,1.23×10^9就是1.23e9,或者12.3e8,0.000012可以寫成1.2e-5,等等。

整數和浮點數在電腦內部儲存的方式是不同的,整數運算永遠是精確的(除法難道也是精確的?是的!),而浮點數運算則可能會有四捨五入的誤差。

 

三.字串

字串是以‘‘""括起來的任意文本,比如‘abc’“xyz”等等。

另外,字串可以標識在一對兒三引號中:””” 或 ”’。三引號中,不需要行屬轉義,它們已經包含在字串中:

print("""\            Usage: thingy [OPTIONS]     -h                        Display this usage message     -H hostname               Hostname to connect to""")

得到如下輸出:

Usage: thingy [OPTIONS]     -h                        Display this usage message     -H hostname               Hostname to connect to

可以使用反斜線為行結尾的連續字串,它表示下一行在邏輯上是本行的後續內容

>>> a="""aaa... bbb... ccc... """>>> print aaaabbbccc>>>

字串提供了許多內建的函數,這些在很多Python程式中很有用處,它們包括:
endswith() – 檢查字串是否以給定字串結尾
startswith() – 檢查字串是否以給定字串開始
upper() – 將字串所有字元變成大寫
lower() – 將字串所有字元變成小寫
isupper()/islower() – 檢測字串是否全是大寫/小寫
len() – 檢測字串長度

>>> print("abc".endswith(‘c‘))True>>> print("abc".startswith(‘c‘))False>>> print("abc".startswith(‘a‘))True>>> print(‘a‘.upper())A>>> print(a.isupper())False>>> print(len("abc"))3
四.布爾值

布爾值和布爾代數的表示完全一致,一個布爾值只有True、False兩種值,要麼是True,要麼是False,在Python中,可以直接用True、False表示布爾值(請注意大小寫),也可以通過布爾運算計算出來。

布爾值可以用and、or和not運算。
and運算是與運算,只有所有都為True,and運算結果才是 True。
or運算是或運算,只要其中有一個為True,or運算結果就是 True。
not運算是非運算,它是一個單目運算子,把True變成False,False變成True。

五.空值

空值是Python裡一個特殊的值,用None表示。None不能理解為0,因為0是有意義的,而None是一個特殊的空值。

六.list

list是Python內建的一種資料類型,使用”[]“表示list是一種有序的集合,可以隨時添加和刪除其中的元素。

1.建立list

構造list非常簡單,直接用[ ]把list的所有元素都括起來,就是一個list對象。通常,我們會把list賦值給一個變數,這樣,就可以通過變數來引用list:

>>> classmates = [‘Jlan‘, ‘Bob‘, ‘Lanny‘]>>> classmates # 列印classmates變數的內容[‘Jlan‘, ‘Bob‘, ‘Lanny‘]

也可以使用列表建構函式list()來建立我們的列表,如:
>>> list(‘a’)
[‘a’]
>>> values = (1,2,3,4)      #values是一個元組
>>> list(values)
[1,2,3,4]

由於Python是動態語言,所以list中包含的元素並不要求都必須是同一種資料類型,我們完全可以在list中包含各種資料:

>>> L = [‘Jlan‘, 170 , 65]

一個元素也沒有的list,就是空list:

>>> empty_list = []
2.索引操作
>>> l = [‘Jlan‘, ‘Bob‘, ‘Lanny‘]   # l[0]=Jlan,l[1]=Bob,l[-1]=Lanny
3.切片操作
>>> l=range(10)>>> l[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]>>> l[0:3][0, 1, 2]>>> l[:3][0, 1, 2]>>> l[:]                            #只用一個”:“表示從頭到尾[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]>>> l[1:][1, 2, 3, 4, 5, 6, 7, 8, 9]>>> l[::2]                          #第三個參數表示每N個取一個[0, 2, 4, 6, 8]>>> l[:5:2][0, 2, 4]>>> l[-1]9>>> l[-5:-1][5, 6, 7, 8]>>> l[-5:-1:2][5, 7]
4.添加刪除和修改資料

list的append()方法,總是把新的元素添加到 list 的尾部:

>>> L = [‘Jlan‘, ‘Bob‘, ‘Lanny‘]>>> L.append(‘Paul‘)>>> print L[‘Jlan‘, ‘Bob‘, ‘Lanny‘, ‘Paul‘]

append()的參數還可以為一個list,如:

>>> L1=[1,2,3]>>> L2=[4,5,6]>>> L1.append(L2)                          >>>L1.extend(L2)         #注意append和extend的區別[1, 2, 3, [4, 5, 6]]                       [1,2,3,4,5,6]

如果要添加到指定的位置,是用list的insert()方法,它接受兩個參數,第一個參數是索引號,第二個參數是待添加的新元素:

>>> L = [‘Jlan‘, ‘Bob‘, ‘Lanny‘]>>> L.insert(0,‘Paul‘)>>> print L[‘Paul‘, ‘Jlan‘, ‘Bob‘, ‘Lanny‘]

list.pop(n)刪除當前list中的第n+1個元素,並且返回list[n+1]
list.remove(key)刪除list中的值key

刪除list中的重複元素
比較容易記憶的是用內建的set

l1 = [‘b‘,‘c‘,‘d‘,‘b‘,‘c‘,‘a‘,‘a‘]l2 = list(set(l1))print l2

還有一種據說速度更快的

l1 = [‘b‘,‘c‘,‘d‘,‘b‘,‘c‘,‘a‘,‘a‘]l2 = {}.fromkeys(l1).keys()print l2

這兩種都有個缺點,去除重複元素後排序變了:

[‘a‘, ‘c‘, ‘b‘, ‘d‘]

如果想要保持他們原來的排序:
用list類的sort方法

l1 = [‘b‘,‘c‘,‘d‘,‘b‘,‘c‘,‘a‘,‘a‘]l2 = list(set(l1))l2.sort(key=l1.index)print l2

或者

l1 = [‘b‘,‘c‘,‘d‘,‘b‘,‘c‘,‘a‘,‘a‘]l2 = sorted(set(l1),key=l1.index)print l2

也可以用遍曆

l1 = [‘b‘,‘c‘,‘d‘,‘b‘,‘c‘,‘a‘,‘a‘]l2 = []for i in l1:    if not i in l2:        l2.append(i)print l2

上面的代碼也可以這樣寫

l1 = [‘b‘,‘c‘,‘d‘,‘b‘,‘c‘,‘a‘,‘a‘]l2 = [][l2.append(i) for i in l1 if not i in l2]print l2

這樣就可以保證排序不變了:

[‘b‘, ‘c‘, ‘d‘, ‘a‘]
七.元組

元組(tumple)是python中的另一種有序列表,只是元組的值不可改變,元組用”()”表示

>>> t=(‘Jlan‘,‘Bob‘,‘Lanny‘)>>> t(‘Jlan‘, ‘Bob‘, ‘Lanny‘)>>> t[1]=‘Hary‘Traceback (most recent call last):  File "", line 1, in TypeError: ‘tuple‘ object does not support item assignment

前面我們看到了tuple一旦建立就不能修改,現在我們來看一個“可變”的tuple:

>>> t = (‘a‘, ‘b‘, [‘A‘, ‘B‘])      #t有3個元素:‘a‘,‘b‘和一個list:[‘A‘, ‘B‘]>>> L = t[2]>>> L[0] = ‘X‘                      #然後,把list的兩個元素改一下>>> L[1] = ‘Y‘>>> print t                         #再看看tuple的內容(‘a‘, ‘b‘, [‘X‘, ‘Y‘])

當元組的元素個數只有一個時,要加一個”,” ,否則元組會被視為一個數值或字串,如:

>>> t=(1)>>> t1>>> t=(1,)>>> t(1,)
八.字典

python中字典用”{key1:value1,key2:value2,……}”的格式來表示,其中key不可變,各對key-value之間沒有順序。
dict在python很常用,正確使用dict非常重要,需要牢記的第一條就是dict的key必須是不可變對象,最常用的key十字串。
在Python中,字串、整數等都是不可變的,因此,可以放心地作為key。而list是可變的,就不能作為key。

>>> grade={‘Jlan‘:100,‘Lanny‘:99,‘Bob‘:98,‘Hary‘:96,‘Alan‘:80}>>> print grade{‘Bob‘: 98, ‘Lanny‘: 99, ‘Alan‘: 80, ‘Hary‘: 96, ‘Jlan‘: 100}>>> grade[‘Bob‘]98>>> print grade.get(‘Alan‘)                 #python3中已沒有這種用法80>>>print grade.get(‘Jlan‘,-1)              #若‘Jlan‘在grade中,則返回grade[‘Jlan‘];若不在則返回None或自訂的值100>>> grade[‘Rob‘]=60                            #添加元素>>>grade.pop(‘Bob‘)                           #刪除元素,list.pop是一個函數,所以要用‘()‘,而不是‘[]‘>>> grade{‘Rob‘: 60, ‘Alan‘: 80, ‘Jlan‘: 100, ‘Hary‘: 96, ‘Lanny‘: 99}

字典的遍曆:

grade={‘Jlan‘:100,‘Lanny‘:99,‘Bob‘:98,‘Hary‘:96,‘Alan‘:80}for key in grade:    print key+‘:‘,grade[key]Bob: 98Lanny: 99Alan: 80Hary: 96Jlan: 100

九.set

set的內部結構和dict很像,唯一區別是不儲存value,因此,判斷一個元素是否在set中速度很快。
set儲存的元素和dict的key類似,必須是不變對象,因此,任何可變對象是不能放入set中的。
最後,set儲存的元素也是沒有順序的。
要建立一個set,需要提供一個list作為輸入集合:

>>> s = set([1, 2,3, 3])>>> sset([1, 2, 3])

#set會自動過濾重複元素
>>>s.add(4)                    #add(key)添加元素
>>>print s
set([1, 2, 3, 4,]
>>>s.remove(1)            #remove(key)刪除元素
>>>s
set([2, 3, 4]

十.再議不可變對象

上面我們講了,str,tumple是不變對象,而list是可變對象。
對於可變對象,比如list,對list進行操作,list內部的內容是會變化的,比如:

>>> a = [‘c‘, ‘b‘, ‘a‘]>>> a.sort()>>> a[‘a‘, ‘b‘, ‘c‘]

而對於不可變對象,比如str,對str進行操作呢:

>>> a = ‘abc‘>>> a.replace(‘a‘, ‘A‘)‘Abc‘>>> a‘abc‘

雖然字串有個replace()方法,也確實變出了’Abc’,但變數a最後仍是’abc’,應該怎麼理解呢?
我們先把代碼改成下面這樣:

>>> a = ‘abc‘>>> b = a.replace(‘a‘, ‘A‘)>>> b‘Abc‘>>> a‘abc‘

要始終牢記的是,a是變數,而’abc’才是字串對象!有些時候,我們經常說,對象a的內容是’abc’,但其實是指,a本身是一個變數,它指向的對象的內容才是’abc’。
當我們調用a.replace(‘a’, ‘A’)時,實際上調用方法replace是作用在字串對象’abc’上的,而這個方法雖然名字叫replace,但卻沒有改變字串’abc’的內 容。相反,replace方法建立了一個新字串’Abc’並返回,如果我們用變數b指向該新字串,就容易理解了,變數a仍指向原有的字元 串’abc’,但變數b卻指向新字串’Abc’了。
所以,對於不變對象來說,調用對象自身的任意方法,也不會改變該對象自身的內容。相反,這些方法會建立新的對象並返回,這樣,就保證了不可變對象本身永遠是不可變的。


Python的資料類型

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.