Python內(nèi)置類型及常見問題

2018-08-26 18:01 更新

python的內(nèi)置數(shù)據(jù)類型非常豐富,大致可以分為五類:None、數(shù)字類型、序列類型、映射類型和集合類型。下面我將分別對他們進(jìn)行介紹,做個(gè)總結(jié)以備以后查看。下面的表列出了各個(gè)類別下的具體數(shù)據(jù)類型。*注:本文所講的內(nèi)容都是基于python2的,python3會(huì)有些不同*。

類型分類類型名稱描述
NoneType(None)null對象None
數(shù)字類型int整數(shù)
long長整數(shù),任意精度(python2)
float浮點(diǎn)數(shù)
complex復(fù)數(shù)
bool布爾值(True或False)
序列類型str字符串
unicodeUnicode字符串(python2)
list列表
tuple元組
xrangexrang()創(chuàng)建的整數(shù)范圍
映射類型dic字典
集合類型set可變集合
frozenset不可變集合

1.None

None表示一個(gè)null對象,這是一個(gè)空對象,如果一個(gè)函數(shù)沒有返回值,則返回null對象。None沒有任何屬性,在布爾表達(dá)式中表示False。

2.數(shù)字類型

除了布爾類型外,所有數(shù)字類型都是有符號(hào)的。整數(shù)的表示范圍在-2147483648和2147483647之間,長整數(shù)可以表示任意長度,只受可用內(nèi)存大小的限制。

  1. #整數(shù)
  2. i = 123
  3. i = int(123)
  4. #長整數(shù)
  5. l = 123L
  6. l = long(123)

浮點(diǎn)數(shù)是雙精度類型(64bit),和c語言中double相同,數(shù)值范圍-1.7*10(-308)到1.7*10(308)。

  1. f = 12.3
  2. f = float(12.3)

復(fù)數(shù)使用一對浮點(diǎn)數(shù)表示,分為實(shí)部和虛部,使用real和imag訪問,虛部后綴j或J。

  1. c = 1.0 + 2.3j
  2. c = complex(1.0, 2.3)
  3. print c.real,c.imag

布爾值只有True和False兩個(gè)值,分別映射為整數(shù)1和0。

  1. b = False
  2. b = bool(True)

2.1.數(shù)字運(yùn)算

除了布爾類型外,int、long、float和complex都可以使用的運(yùn)算為:加、減、乘、除、整除、冪運(yùn)算和取余。下面分別舉例說明。

  1. >>> 1 + 2 # 加法
  2. 3
  3. >>> 1 - 2 # 減法
  4. -1
  5. >>> 2 * 3 # 乘
  6. 6
  7. >>> 2 / 4 # 整數(shù)除
  8. 0
  9. >>> 2 / 4.0 # 浮點(diǎn)除
  10. 0.5
  11. >>> 3 // 2.0 # 整除
  12. 1.0
  13. >>> 2 % 3 # 取余
  14. 2
  15. >>> 3 ** 2 # 冪運(yùn)算 =3^2
  16. 9

對于整數(shù)還可以進(jìn)行位運(yùn)算,共有6種位運(yùn)算:取反(~)、左移(<<)、右移(>>)、異或(^)、按位或(|)、按位與(&)。

  1. >>> ~1 # 1取反后為-2的補(bǔ)碼
  2. -2
  3. >>> 8 << 1 # 左移
  4. 16
  5. >>> 8 >> 2 # 右移
  6. 2
  7. >>> 1 ^ 3 # 01 和 11 異或得到10,就是2
  8. 2
  9. >>> 1 | 3 # 01 和 11 位或得到11,就是3
  10. 3
  11. >>> 1 & 3 # 01 和 11 位與得到01,就是1
  12. 1

布爾類型可以通過布爾表達(dá)式取值,布爾比較運(yùn)算符有6種:小于(<)、小于等于(<=)、大于(>)、大于等于(>=)、等于(==)、不等于(!=)。

  1. >>> 1 < 2
  2. True
  3. >>> 1 <= 2
  4. True
  5. >>> 1 > 2
  6. False
  7. >>> 1 >= 2
  8. False
  9. >>> 1 == 2
  10. False
  11. >>> 1 != 2
  12. True

對于布爾類型還可以進(jìn)行邏輯運(yùn)算,有3種運(yùn)算:邏輯非(not)、邏輯非或(or)、邏輯與(and)。

  1. >>> not True
  2. False
  3. >>> True or False
  4. True
  5. >>> True and False
  6. False

2.2.常用數(shù)字類型函數(shù)

abs():返回給定對象的絕對值。

  1. >>> abs(-2)
  2. 2

divmod():把除法和取余運(yùn)算結(jié)合起來,返回一個(gè)包含商和余數(shù)的元組。

  1. >>> divmod(10, 3)
  2. (3, 1)

pow():兩個(gè)參數(shù),冪運(yùn)算。三個(gè)參數(shù),乘方后取余。

  1. >>> pow(2, 5),pow(2, 5, 10)
  2. (32, 2)

round():四舍五入

  1. >>> round(3.4),round(3.6)
  2. (3.0, 4.0)

floor():向下取整, ceil():向上取整, sqrt():開方, 需要math模塊。

  1. >>> from math import floor,ceil,sqrt
  2. >>> floor(3.6),ceil(3.6),sqrt(9)
  3. (3.0, 4.0, 3.0)

conjugate():復(fù)數(shù)取共軛

  1. >>> c = 2 + 3j
  2. >>> c.conjugate()
  3. (2-3j)

3.序列類型

序列表示索引為非負(fù)數(shù)的有序?qū)ο蠹希ㄗ址?、列表和元組。字符串是字符的序列,列表和元組是任意對象的序列。字符串和元組是不可變的,而列表可以插入、刪除和替換。所有序列支持迭代。

3.1.字符串

創(chuàng)建一個(gè)字符串很簡單,但表示字符串的方法有很多。

  1. s = 'string'
  2. s = "string" # 和上面單引號(hào)一樣
  3. s = '''string''' # 三引號(hào)之間的內(nèi)容都被保留,用于多行輸入
  4. s = r"string" # 原生字符,關(guān)掉字符串中的轉(zhuǎn)義。
  5. s = u"string" # unicode字符串

字符串的方法很多,但不會(huì)改變字符串里的內(nèi)容,常用的如下表所示。

方法描述
index(sub[,start[,end]])找到子字符串sub首次出現(xiàn)的位置,否則返回-1
find(sub[,start[,end]])找到子字符串sub首次出現(xiàn)的位置,否則報(bào)錯(cuò)
startswith(prefix[,start[,end]])檢查是否以prefix開頭
count(sub[,start[,end]])計(jì)算子字符串sub出現(xiàn)的次數(shù)
decode([encoding[, errors]])以encoding解碼字符串,返回unicode字符串(只用于字節(jié)字符串)
encode([encoding[, errors]])以encoding編碼字符串(只用于unicode字符串)
upper()返回大寫形式
lower()返回小寫形式
split(sep[,maxsplit])以sep為分隔符分割字符串,maxsplit為最大分割次數(shù)
join(t)使用當(dāng)前字符串為分隔符連接t中的字符串
format(*args, kwargs)格式化字符串
舉個(gè)format的例子,{0}表示*args的第一個(gè)值,{name}表示kwargs中name的值。

  1. >>> "Here is {0},I'm {name}.".format("wuyuans.com", name="wuyuan")
  2. "Here is wuyuans.com,I'm wuyuan"

3.2.列表和元組

列表的內(nèi)容可變,可以包含任意對象,使用中括號(hào)表示。
元組的內(nèi)容不可變,可以包含任意對象,使用圓括號(hào)表示。

  1. l = [1, 2, 3, '4', '5'] # 列表
  2. l = list((1, 2, 3, '4', '5'))
  3. t = (1, 2, 3, '4', '5') # 元組
  4. t = tuple("1234")

列表的方法主要用于改變里面的內(nèi)容,下面列出列表常用的方法。

方法描述
list(s)將s轉(zhuǎn)化為一個(gè)列表
s.append(x)將新元素x加到s的尾部
s.extend(t)將新列表t加到s的尾部
s.count(x)計(jì)算x的出現(xiàn)次數(shù)
s.index(x[, start[, stop]])搜索x元素
s.insert(i, x)在i處添加x
s.pop([i])彈出第i個(gè)元素,如果省略i,彈出最后一個(gè)
s.remove(x)移除x
s.reverse(x)反轉(zhuǎn)列表
s.sort([key[, reverse]])排序
也可以通過索引來刪除列表中的元素。

  1. >>> l = [1, 2, 3, 4, 5]
  2. >>> del l[1]
  3. >>> l
  4. [1, 3, 4, 5]

3.3.序列通用操作

所有序列都可以通過索引來訪問,第一個(gè)元素的索引為0,-1為最后一個(gè)元素,-2倒數(shù)第二個(gè),一次類推。
切片操作:指定索引范圍,返回相應(yīng)的子序列。
還有一些常用的,如下所示

  1. >>> t = (1, 2, 3, 4, 5)
  2. >>> l = [1, 2, 3, 4, 5]
  3. >>> t[0]
  4. 1
  5. >>> t[1:4] # 索引1~4
  6. (2, 3, 4)
  7. >>> t[1:4:2] # 索引1~4,步進(jìn)為2
  8. (2, 4)
  9. >>> len(t) # 序列長度
  10. 5
  11. >>> max(t) # 最大值
  12. 5
  13. >>> min(t) # 最小值
  14. 1
  15. >>> sum(t) # 序列求和
  16. 15

3.4.xrange()對象

xrange()對象比較特殊,他表示一個(gè)整數(shù)范圍,只有訪問它時(shí)才會(huì)計(jì)算他的值,所以切片操作是不能用于xrange對象的。xrange對象由xrange([i, ] j [, stride])函數(shù)創(chuàng)建,i為起始值,stride為步進(jìn)值。

  1. >>> x = xrange(1,10,2)
  2. >>> for i in x:
  3. print i
  4. 1
  5. 3
  6. 5
  7. 7
  8. 9

4.映射類型

字典(dict)是python為唯一的內(nèi)置映射類型,任何不可變對象都可以用作字典的鍵值,如字符串、數(shù)字、元組等。字典使用大括號(hào)表示,鍵和值之間用冒號(hào)分割,各個(gè)鍵值間用逗號(hào)隔開。映射對象是無序的。

  1. d = dict((['name', 'wuyuan'], ['age', 23]))
  2. d = {'name': 'wuyuan', 'blog': 'wuyuans.com', 'age': 23}
  3. d['school'] = 'HDU' # 添加一項(xiàng)

字典的常用方法和操作

方法和操作描述
len(d)返回字典d的項(xiàng)目數(shù)
d[k]d中鍵k的值
del d[k]刪除d[k]
k in d如果k是d的鍵值,返回True
d.clear()清空d
d.copy()返回d的一個(gè)拷貝
d.fromkeys(s[, value])返回一個(gè)新字典,s中的所有元素作為新字典的鍵,值為value
d.get(k[, v])返回d[k],沒有則返回v
d.items()返回由鍵值組成的序列,主要用于歷遍
d.keys()返回由鍵組成的序列
d.values()返回由值組成的序列
d.pop(k[, default])彈出d[k],沒有則返回default
d.update(b)將b中對象添加到d中
字典的歷遍方式:

  1. #使用鍵歷遍
  2. for i in d:
  3. print i,d[i]
  4. #使用鍵值歷遍
  5. for k,v in d.items():
  6. print k,v

5.集合類型

集合是唯一項(xiàng)的無序集,集合不提供索引或切片操作,集合的長度可變,但放入里面的必須是不可變的。集合分為兩種:可變集合(set)和不可變集合(frozenset)。

  1. s = set([1, 2, 3])
  2. fs = frozenset([1, 2, 3])

集合通用方法和操作

方法和操作描述
len(s)返回集合s的項(xiàng)目數(shù)
s.copy()返回集合s的一份副本
s.difference(t)求差集,返回在s中,但不在t中的項(xiàng)目
s.intersection(t)求交集,返回同時(shí)在s和t中的項(xiàng)目
s.isdisjoint(t)s和t中沒有相同項(xiàng),返回True
s.issubset(t)s是t的子集,返回True
s.issuperset(t)s是t的超集,返回True
s.union(t)求并集,返回在s或t中的項(xiàng)目
可變集合set的方法和操作

方法和操作描述
s.add(item)添加item
s.clear()清空集合s
s.difference_update(t)在s中刪除同時(shí)在s和t中的項(xiàng)目
s.discard(item)刪除item
s.pop()彈出任一項(xiàng)
s.remove(item)刪除item,沒有則引發(fā)異常
s.update(t)將t中所有項(xiàng)添加到t中,t為任意支持迭代對象

python內(nèi)置類型常見問題


python基本內(nèi)置數(shù)據(jù)類型有哪些?

一些基本數(shù)據(jù)類型,比如:整型(數(shù)字)、字符串、元組、列表、字典和布爾類型。隨著學(xué)習(xí)進(jìn)度的加深,大家還會(huì)接觸到更多更有趣的數(shù)據(jù)類型,python初學(xué)者入門時(shí)先了解這幾種類型就可以了。


基本內(nèi)置數(shù)據(jù)類型對應(yīng)符號(hào)?

1)整型——int——數(shù)字

python有5種數(shù)字類型,最常見的就是整型int。例如:1234、-1234

2)布爾型——bool——用符號(hào)==表示

布爾型是一種比較特殊的python數(shù)字類型,它只有True和False兩種值,它主要用來比較和判斷,所得結(jié)果叫做布爾值。例如:3==3 給出True,3==5給出False

3)字符串——str——用' '或" "表示

例如:'www.iplaypython.com'或者"hello"

4)列表——list——用[ ]符號(hào)表示

例如:[1,2,3,4]

5)元組——tuple——用( )符號(hào)表示

例如:('d',300)

6)字典——dict——用{ }符號(hào)表示

例如:{'name':'coco','country':'china'}


Python基本數(shù)據(jù)類型中哪些可變,哪些是不可變?

python可變數(shù)據(jù)類型:列表list[ ]、字典dict{ }

python不可變數(shù)據(jù)類型:整型int、字符串str' '、元組tuple()




以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)