Python數(shù)據(jù)類型詳解

數(shù)值類型

整數(shù)類型 int

Python 3 之后归形,整數(shù)類型為 int 蜘醋,不在區(qū)分整型與長(zhǎng)整型,(Python2.x 中分別是 int 和 long 類型)整數(shù)的長(zhǎng)度不在受限。我覺(jué)得這個(gè)特性實(shí)在方便抛猖,少去了其它語(yǔ)言處理溢出的步驟,記得以前學(xué)C語(yǔ)言的時(shí)候做ACM題的大數(shù)相乘廢了不少力鼻听。

# 不存在溢出問(wèn)題财著,舒服
>>> 55555555555555555555555 * 66666666666666666666666666666666666666
3703703703703703703703666666666666666629629629629629629629630L

#直接寫(xiě)下數(shù)值,默認(rèn)十進(jìn)制
>>> 23
23
#前面加0b撑碴,二進(jìn)制
>>> 0b101010
42
#前面加0o撑教,八進(jìn)制
>>> 0o15
13
#前面加0x,十六進(jìn)制
>>> 0x2F
47
>>> 

如果想將字符串醉拓、浮點(diǎn)數(shù)伟姐、布爾值等類型裝換為整數(shù)則使用強(qiáng)制轉(zhuǎn)換函數(shù) int() ,使用函數(shù) oct()、hex() 將十進(jìn)制返回對(duì)應(yīng)進(jìn)制的字符串亿卤。

浮點(diǎn)類型 float

想知道某個(gè)數(shù)據(jù)的類型使用 type() 函數(shù):

>>> type(3.14159)
<type 'float'>
#可以用科學(xué)計(jì)數(shù)法表示浮點(diǎn)類型
>>> 1.234e-10
1.234e-10
>>> type(1.234e-10)
<type 'float'>

如果用個(gè)浮點(diǎn)字符串如'1.2345'愤兵,想要將其轉(zhuǎn)換為int類型,不能直接用int()函數(shù)排吴,要先用float()函數(shù)轉(zhuǎn)換為float秆乳,再轉(zhuǎn)為int:

>>> int(1.2345)
1
# 這樣會(huì)報(bào)錯(cuò)
>>> int('1.2345')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '1.2345'
>>> int(float('1.2345'))
1
布爾類型

布爾類型只有兩個(gè)值:True和False. 0為False,非0值都為True钻哩。將None屹堰、False、0街氢、0.0扯键、0j、''珊肃、()荣刑、[]、{} 等傳給bool(),都會(huì)返回False近范,其他的為True嘶摊。

復(fù)數(shù)

Python支持復(fù)數(shù)直接表示法,使用A+Bj的形式评矩,是complex類的實(shí)例叶堆,可以直接運(yùn)算:

>>> 1 + 2j + 2 + 3j
(3+5j)
>>> 10 + 3j + 2 + 3j
(12+6j)
>>> 

字符串類型

Python中使用' '或" "來(lái)括住字符標(biāo)明是一個(gè)字符串:

>>> 'study python'
'study python'
>>> 'study "python"'
'study "python"'
# Python 自動(dòng)將'\'視為'\\'
>>> 'c:\windows'
'c:\\windows'

''為轉(zhuǎn)義字符,需要注意特殊情況(這里\t相當(dāng)與Tab):

>>> print('c:\tindows')
c:  indows
>>> print('c:\\tindows')
c:\tindows
>>> print('c:\\\tindows')
c:\ indows
>>> print('c:\\\\tindows')
c:\\tindows

可以看到這種寫(xiě)法有些不便斥杜,可以使用原生字符串Raw_String來(lái)表示虱颗,在字符串面前加上 r 就行:

>>> print(r'c:\\tindows')
c:\\tindows

想讓字符串包含換行縮進(jìn)等格式時(shí)沥匈,使用三重引號(hào)'''或""":

>>> '''This is a
... examplr'''
'This is a\nexamplr'
>>> print('''This is a
... example''')
This is a
example

可以使用str()類將數(shù)值轉(zhuǎn)換為字符串,使用ord()函數(shù)可以返回一個(gè)字符的Unicode編碼忘渔,使用chr()函數(shù)則可以將Unicode編碼轉(zhuǎn)成一個(gè)字符:

>>> str(21.321)
'21.321'
>>> ord('一')
19968
>>> chr(19968)
'一'
格式化字符串

當(dāng)指定多個(gè)字符串給print()函數(shù)時(shí)高帖,默認(rèn)的分隔符是空格,如果想要指定其他的字符畦粮,可以多指定一個(gè)sep參數(shù):

>>> name = 'JYH'
>>> print('hello', name)
hello JYH
>>> print('hello', name, sep = ', ')
hello, JYH
>>> print('hello', name, end = '')
hello JYH>>> 

print()函數(shù)中默認(rèn)輸出換行散址,它有一個(gè)參數(shù)end,在指定的字符串輸出后宣赔,end指定的字符才會(huì)被輸出预麸,可以用這個(gè)參數(shù)來(lái)控制是否換行。
可以像C語(yǔ)言一樣的在print中用'%'來(lái)控制格式儒将,直接看案例:

>>> '你好 %s' % 'JYH'
'你好 JYH'
>>> '%d + %f = %.3f' % (2, 3.14159, 2 + 3.14159)
'2 + 3.141590 = 5.142'
>>> '%5d + %5f = %2.3f' % (2, 3.14159, 2 + 3.14159)
'    2 + 3.141590 = 5.142'

舊的格式化麻煩且可讀性不是很好吏祸,好在后面有了新的格式化方法:

>>> '{} / {} = {}'.format(5, 7, 5/7)
'5 / 7 = 0.7142857142857143'
>>> '{1} / {0} = {2}'.format(7, 5, 5/7)
'5 / 7 = 0.7142857142857143'
>>> '{a} /  = {result}'.format(a = 5, b = 7, result = 5/7)
'5 / 7 = 0.7142857142857143'

占位符變成了{(lán)}钩蚊,可以用索引或者名稱來(lái)指定參數(shù)贡翘,也可以指定數(shù)字的寬度與小數(shù)點(diǎn)位數(shù)以及補(bǔ)齊字符:

>>> '{1:d} / {0:d} = {2:.2f}'.format(7, 5, 5/7)
'5 / 7 = 0.71'
>>> '{1:5d} / {0:10d} = {2:10.2f}'.format(7, 5, 5/7)
'    5 /          7 =       0.71'
#"<"用來(lái)左對(duì)齊,"^"前面的字符為補(bǔ)齊字符
>>> '{1:>5d} / {0:<10d} = {2:0^10.2f}'.format(7, 5, 5/7)
'    5 / 7          = 0000.71000'

format()函數(shù)用很多用法砰逻,可以像使用索引一樣獲取列表的值鸣驱、使用鍵名稱獲取字典的值還有引用模塊中的名稱以及格式化單個(gè)值:

>>> array = ['a', 'b', 'c']
>>> 'array has {a[0]}, {a[1]}, {a[2]}'.format(a = array)
'array has a, b, c'
>>> user = {'name' : 'JYH', 'eamil' : '123@qq.com'}
>>> 'The name of user is {user[name]}'.format(user = user)
'The name of user is JYH'
>>> import sys
>>> 'My system is {mac.platform}'.format(mac = sys)
'My system is darwin'
>>> format(1.234, '0^10.2f')
'0001.23000'

可以用len()函數(shù)獲取字符串的長(zhǎng)度,實(shí)用encode()方法可將字符串轉(zhuǎn)為指定編碼诱渤,用decode()方法解碼丐巫,使用 in 來(lái)檢測(cè)某字符是否在字符串中:

>>> str = '字符串'
>>> len(str)
3
>>> str.encode('UTF-8')
b'\xe5\xad\x97\xe7\xac\xa6\xe4\xb8\xb2'
>>> str.encode('UTF-8').decode('UTF-8')
'字符串'
>>> '符' in str
True

無(wú)論是Python2 還是 Python3 字符串一旦創(chuàng)建都是不可便變動(dòng)的 immutable ,無(wú)法修改它的內(nèi)容勺美,不像OC還有mutableString递胧。

群集類型

列表 list

list,就相當(dāng)于數(shù)組赡茸,有序缎脾,內(nèi)容長(zhǎng)度可變動(dòng),使用[]表示占卧,每個(gè)元素用逗號(hào)','分開(kāi)遗菠,下面展示了列表的一些常用方法:

>>> list = [1, 2, 3, 4]
# remove() 刪除指定的元素值, del 刪除索引位置的值
>>> list.remove(2)
>>> list
[1, 3, 4]
>>> del list[0]
>>> list
[3, 4]
>>> list.extend([1 , 2])
>>> list
[3, 4, 1, 2]
>>> list.pop()
2
>>> list
[3, 4, 1]
>>> list.append(2)
>>> list
[3, 4, 1, 2]
>>> list.sort()
>>> list
[1, 2, 3, 4]
>>> list.reverse()
>>> list
[4, 3, 2, 1]
>>> 2 in list
True

可以從可迭代對(duì)象(如字符串华蜒、集合辙纬、元組)用 list() 直接創(chuàng)建一個(gè)列表:

>>> list('abcde')
['a', 'b', 'c', 'd', 'e']
>>> list({'a', 'b', 'c', 'c', 'b'})
['a', 'b', 'c']
>>> list((1,2,3,4))
[1, 2, 3, 4]
集合 set

集合的內(nèi)容無(wú)序且不重復(fù),使用{}包裹元素叭喜,使用逗號(hào)','分割贺拣,如果有重復(fù)的元素會(huì)被自動(dòng)剔除。創(chuàng)建空集合必須使用set();,不能使用{},這會(huì)創(chuàng)建一個(gè)空字典:

>>> shop = set()
>>> shop.add('water')
>>> shop.add('cake')
>>> shop
{'water', 'cake'}
>>> shop.remove('water')
>>> 'water' in shop
False

由于集合中的元素不能重復(fù)譬涡,所以并非所有元素都能加入集合中闪幽,只有可哈希hashable的對(duì)象能放進(jìn)去,至于什么是可哈衔性龋看這里可哈希(hashable)與不可哈希(unhashable)盯腌,還可以從其他可迭代的對(duì)象中創(chuàng)建集合:

>>> set('fsafa')
{'s', 'a', 'f'}
>>> set([1,2,3,4])
{1, 2, 3, 4}
>>> set((1,2,3,4))
{1, 2, 3, 4}
字典 dict

字典用來(lái)存儲(chǔ)鍵值對(duì),創(chuàng)建字典時(shí)陨瘩,鍵不能重復(fù)腕够,必須是 hashable :

>>> user = {'name' : 'JYH', 'pwd' : 1234}
>>> user['pwd']
1234
>>> user['emial'] = '1234@qq.com'
>>> user
{'name': 'JYH', 'pwd': 1234, 'emial': '1234@qq.com'}
#其他創(chuàng)建字典的方式
>>> user2 = dict(name = 'HJY', pwd = 5678, email = '5678@qq.com')
>>> user2
{'name': 'HJY', 'pwd': 5678, 'email': '5678@qq.com'}
>>> user3 = dict([('name', '三十六'), ('pwd', 123321)])
>>> user3
{'name': '三十六', 'pwd': 123321}
>>> user2.fromkeys(['name', 'pwd'], 'hahaha')
{'name': 'hahaha', 'pwd': 'hahaha'}

常用方法

#方法                                  #描述  
-------------------------------------------------------------------------------------------------  
D.clear()                              #移除D中的所有項(xiàng)  
D.copy()                               #返回D的副本  
D.fromkeys(seq[],val])                  #返回從seq中獲得的鍵和被設(shè)置為val的值的字典∈霸停可做類方法調(diào)用  
D.get(key[],default])                   #如果D[key]存在燕少,將其返回卡者;否則返回給定的默認(rèn)值None  
D.has_key(key)                         #檢查D是否有給定鍵key  
D.items()                              #返回表示D項(xiàng)的(鍵蒿囤,值)對(duì)列表  
D.iteritems()                          #從D.items()返回的(鍵,值)對(duì)中返回一個(gè)可迭代的對(duì)象  
D.iterkeys()                           #從D的鍵中返回一個(gè)可迭代對(duì)象  
D.itervalues()                         #從D的值中返回一個(gè)可迭代對(duì)象  
D.keys()                               #返回D鍵的列表  
D.pop(key[],d])                         #移除并且返回對(duì)應(yīng)給定鍵key或給定的默認(rèn)值D的值  
D.popitem()                            #從D中移除任意一項(xiàng)崇决,并將其作為(鍵材诽,值)對(duì)返回  
D.setdefault(key[],default])            #如果D[key]存在則將其返回;否則返回默認(rèn)值None  
D.update(other)                        #將other中的每一項(xiàng)加入到D中恒傻。  
D.values()                             #返回D中值的列表
元組 tuple

元組跟列表一樣脸侥,都是有序結(jié)構(gòu),但不同的是盈厘,元組一旦創(chuàng)建之后無(wú)法變動(dòng)睁枕,所以它是hashable 。創(chuàng)建元組只需要在某個(gè)值后面加一個(gè)逗號(hào)','即可:

>>> 1,
(1,)
>>> 1, 2, 3,
(1, 2, 3)
>>> 1, 'a', True
(1, 'a', True)
>>> (1, 2, 3)
(1, 2, 3)

創(chuàng)建元組時(shí)沸手,最后一個(gè)逗號(hào)可以省略(只包含一個(gè)元素的除外)外遇,通常加上()更直觀的看出這是一個(gè)元組。

元組的作用:
可以返回一組相關(guān)的值契吉,不用自己定義類型跳仿;可以當(dāng)做不能修改的參數(shù)傳遞給函數(shù),因?yàn)樵M無(wú)法修改捐晶,如果函數(shù)中試圖修改數(shù)據(jù)菲语,那么就會(huì)報(bào)錯(cuò),使得程序更加嚴(yán)謹(jǐn)惑灵,而且元組所占用的內(nèi)存較小山上。
元組其他用法:

#拆解(unpack)
>>> a = (1, 'a', True)
>>> num, str, bool = a
>>> num
1
>>> bool
True

#python3 新特性
>>> a, *b , c = (1,2,3,4,5)
>>> a
1
>>> b
[2, 3, 4]
>>> c
5

#交換兩個(gè)變量的值,不像其它語(yǔ)言需要中間變量
>>> a = 1
>>> b = 2
>>> a, b = b, a
>>> a
2
>>> b
1
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末英支,一起剝皮案震驚了整個(gè)濱河市佩憾,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌潭辈,老刑警劉巖鸯屿,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件澈吨,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡寄摆,警方通過(guò)查閱死者的電腦和手機(jī)谅辣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)婶恼,“玉大人桑阶,你說(shuō)我怎么就攤上這事」窗睿” “怎么了蚣录?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)眷篇。 經(jīng)常有香客問(wèn)我萎河,道長(zhǎng),這世上最難降的妖魔是什么蕉饼? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任虐杯,我火速辦了婚禮,結(jié)果婚禮上昧港,老公的妹妹穿的比我還像新娘擎椰。我一直安慰自己,他們只是感情好创肥,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布达舒。 她就那樣靜靜地躺著,像睡著了一般叹侄。 火紅的嫁衣襯著肌膚如雪巩搏。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 48,970評(píng)論 1 284
  • 那天圈膏,我揣著相機(jī)與錄音塔猾,去河邊找鬼。 笑死稽坤,一個(gè)胖子當(dāng)著我的面吹牛丈甸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播尿褪,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼睦擂,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了杖玲?” 一聲冷哼從身側(cè)響起顿仇,我...
    開(kāi)封第一講書(shū)人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后臼闻,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體鸿吆,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年述呐,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了惩淳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡乓搬,死狀恐怖思犁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情进肯,我是刑警寧澤激蹲,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站江掩,受9級(jí)特大地震影響学辱,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜频敛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一项郊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧斟赚,春花似錦、人聲如沸差油。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蓄喇。三九已至发侵,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間妆偏,已是汗流浹背刃鳄。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留钱骂,地道東北人叔锐。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像见秽,于是被迫代替她去往敵國(guó)和親愉烙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young閱讀 3,776評(píng)論 1 10
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法解取,類相關(guān)的語(yǔ)法步责,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法蔓肯,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,581評(píng)論 18 399
  • 關(guān)于 Swift 重要這個(gè)文檔所包含的準(zhǔn)備信息, 是關(guān)于開(kāi)發(fā)的 API 和技術(shù)的遂鹊。這個(gè)信息可能會(huì)改變, 根據(jù)這個(gè)文...
    無(wú)灃閱讀 4,275評(píng)論 1 27
  • 今天的太陽(yáng)升起得很早稿辙,陳糯第一次睜開(kāi)眼的時(shí)候,就看見(jiàn)陽(yáng)光撒在她放著多肉的窗臺(tái)上气忠。白色的窗簾被風(fēng)吹著邻储,就像女孩子笑起...
    桃蔻閱讀 649評(píng)論 1 1
  • 我可愛(ài)的寶貝,媽媽愛(ài)你旧噪!
    恩恩媽閱讀 204評(píng)論 0 0