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

數(shù)值類型

整數(shù)類型 int

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

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

#直接寫下數(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

可以看到這種寫法有些不便,可以使用原生字符串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)','分開,下面展示了列表的一些常用方法:

>>> 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)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容