1. 程式人生 > >python基礎-1.4 Python數據類型

python基礎-1.4 Python數據類型

要求 san 屬於 complex pac .com rec 例如 ins

標準數據類型

  • Python3 中有六個標準的數據類型:
    • Number(數字)
      • int
      • bool
      • float
      • complex(復數)
    • String(字符串)
    • List(列表)
    • Tuple(元組)
    • Sets(集合)
    • Dictionary(字典)

(1) Number(數字)

  • Python3 支持 int、float、bool、complex(復數)。
  • 在Python 3裏,只有一種整數類型 int,表示為長整型,沒有 python2 中的 Long。
  • 像大多數語言一樣,數值類型的賦值和計算都是很直觀的。
  • 內置的 type() 函數可以用來查詢變量所指的對象類型。
>>> a, b, c, d = 20, 5.5, True, 4+3j
>>> print
(type(a), type(b), type(c), type(d)) <class int> <class float> <class bool> <class complex>

  • 此外還可以用 isinstance 來判斷:
>>>a = 111
>>> isinstance(a, int)
True
>>>

  • isinstance 和 type 的區別在於:
class A:
    pass

class B(A):
    pass

isinstance(A(), A)  
# returns True type(A()) == A # returns True isinstance(B(), A) # returns True type(B()) == A # returns False

  • 區別就是:
    • type()不會認為子類是一種父類類型。
    • isinstance()會認為子類是一種父類類型。
註意:在 Python2 中是沒有布爾型的,它用數字 0 表示 False,用 1 表示 True。
到 Python3 中,把 True 和 False 定義成關鍵字了,但它們的值還是 1 和 0,它們可以和數字相加。
  • 當你指定一個值時,Number 對象就會被創建:
var1 = 1
var2 = 10
  • 您也可以使用del語句刪除一些對象引用。
    • del語句的語法是:
    • del var1[,var2[,var3[....,varN]]]]
  • 您可以通過使用del語句刪除單個或多個對象。例如
del var
del var_a, var_b
整數的進制:
# 輸出其他進制數值

>>> bin(255) #255的二進制
0b11111111
>>> oct(255) #255的八進制
0o377
>>> hex(255) #255的十六進制
0xff

>>> a=0b10   #賦值二進制數值
>>> a
2
>>> a=0o10   #賦值八進制數值
>>> a
8
>>> a=0x10   #賦值十六進制數值
>>> a
16

(2) String(字符串)

  • Python中的字符串用單引號(‘)或雙引號(")括起來,同時使用反斜杠()轉義特殊字符。
  • 字符串的截取的語法格式如下:

    • 變量[頭下標:尾下標]
  • 索引值以 0 為開始值,-1 為從末尾的開始位置。

  • 加號 (+) 是字符串的連接符, 星號 (*) 表示復制當前字符串,緊跟的數字為復制的次數。實例如下:
#!/usr/bin/python3

str = zhangsan

print (str)          # 輸出字符串
print (str[0:-1])    # 輸出第一個到倒數第二個的所有字符
print (str[0])       # 輸出字符串第一個字符
print (str[2:5])     # 輸出從第三個開始到第五個的字符
print (str[2:])      # 輸出從第三個開始的後的所有字符
print (str * 2)      # 輸出字符串兩次
print (str + "TEST") # 連接字符串

  • 輸出結果:
zhangsan
zhangsa
z
ang
angsan
zhangsanzhangsan
zhangsanTEST
  • Python 使用反斜杠()轉義特殊字符,如果你不想讓反斜杠發生轉義,可以在字符串前面添加一個r,表示原始字符串:
>>> print(Ru\noob)
Ru
oob
>>> print(rRu\noob)
Ru\noob
>>>

  • 另外,反斜杠()可以作為續行符,表示下一行是上一行的延續。也可以使用 """...""" 或者 ‘‘‘...‘‘‘ 跨越多行。
  • 註意,Python 沒有單獨的字符類型,一個字符就是長度為1的字符串。
>>>word = Python
>>> print(word[0], word[5])
P n
>>> print(word[-1], word[-6])
n P

  • 與 C 字符串不同的是,Python 字符串不能被改變。向一個索引位置賦值,比如word[0] = ‘m‘會導致錯誤。

  • 註意:

    • 1、反斜杠可以用來轉義,使用r可以讓反斜杠不發生轉義。
    • 2、字符串可以用+運算符連接在一起,用*運算符重復。
    • 3、Python中的字符串有兩種索引方式,從左往右以0開始,從右往左以-1開始。
    • 4、Python中的字符串不能改變。

(3) List(列表)

  • List(列表) 是 Python 中使用最頻繁的數據類型。
  • 列表可以完成大多數集合類的數據結構實現。列表中元素的類型可以不相同,它支持數字,字符串甚至可以包含列表(所謂嵌套)。
  • 列表是寫在方括號[]之間、用逗號分隔開的元素列表。
  • 和字符串一樣,列表同樣可以被索引和截取,列表被截取後返回一個包含所需元素的新列表。
  • 列表截取的語法格式如下:
    • 變量[頭下標:尾下標]
  • 索引值以 0 為開始值,-1 為從末尾的開始位置。
  • 加號(+)是列表連接運算符,星號(*)是重復操作。如下實例:
#!/usr/bin/python3

list = [ abcd, 786 , 2.23, demo, 70.2 ]
tinylist = [123, demo]

print (list)            # 輸出完整列表
print (list[0])         # 輸出列表第一個元素
print (list[1:3])       # 從第二個開始輸出到第三個元素
print (list[2:])        # 輸出從第三個元素開始的所有元素
print (tinylist * 2)    # 輸出兩次列表
print (list + tinylist) # 連接列表

  • 以上實例輸出結果:

    [‘abcd‘, 786, 2.23, ‘demo‘, 70.2]
    abcd
    [786, 2.23]
    [2.23, ‘demo‘, 70.2]
    [123, ‘demo‘, 123, ‘demo‘]
    [‘abcd‘, 786, 2.23, ‘demo‘, 70.2, 123, ‘demo‘]
  • 與Python字符串不一樣的是,列表中的元素是可以改變的:
>>>a = [1, 2, 3, 4, 5, 6]
>>> a[0] = 9
>>> a[2:5] = [13, 14, 15]
>>> a
[9, 2, 13, 14, 15, 6]
>>> a[2:5] = []   # 將對應的元素值設置為 [] 
>>> a
[9, 2, 6]

  • List內置了有很多方法,例如append()、pop()等等,這在後面會講到。

*註意:

* 1、List寫在方括號之間,元素用逗號隔開。
* 2、和字符串一樣,list可以被索引和切片。
* 3、List可以使用+操作符進行拼接。
* 4、List中的元素是可以改變的。

(4) Tuple(元組)

  • 元組(tuple)與列表類似,不同之處在於元組的元素不能修改。元組寫在小括號(())裏,元素之間用逗號隔開。
  • 元組中的元素類型也可以不相同:
#!/usr/bin/python3

tuple = ( abcd, 786 , 2.23, demo, 70.2  )
tinytuple = (123, demo)

print (tuple)             # 輸出完整元組
print (tuple[0])          # 輸出元組的第一個元素
print (tuple[1:3])        # 輸出從第二個元素開始到第三個元素
print (tuple[2:])         # 輸出從第三個元素開始的所有元素
print (tinytuple * 2)     # 輸出兩次元組
print (tuple + tinytuple) # 連接元組

  • 以上實例輸出結果:
    (abcd, 786, 2.23, demo, 70.2)
    abcd
    (786, 2.23)
    (2.23, demo, 70.2)
    (123, demo, 123, demo)
    (abcd, 786, 2.23, demo, 70.2, 123, demo)

  • 元組與字符串類似,可以被索引且下標索引從0開始,-1 為從末尾開始的位置。
  • 也可以進行截取(看上面,這裏不再贅述)。
  • 其實,可以把字符串看作一種特殊的元組。
>>>tup = (1, 2, 3, 4, 5, 6)
>>> print(tup[0])
1
>>> print(tup[1:5])
(2, 3, 4, 5)
>>> tup[0] = 11  # 修改元組元素的操作是非法的
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: tuple object does not support item assignment
>>>

  • 雖然tuple的元素不可改變,但它可以包含可變的對象,比如list列表。
  • 構造包含 0 個或 1 個元素的元組比較特殊,所以有一些額外的語法規則:
tup1 = ()    # 空元組
tup2 = (20,) # 一個元素,需要在元素後添加逗號
string、list和tuple都屬於sequence(序列)。

  • 註意:
    • 1、與字符串一樣,元組的元素不能修改。
    • 2、元組也可以被索引和切片,方法一樣。
    • 3、註意構造包含0或1個元素的元組的特殊語法規則。
    • 4、元組也可以使用+操作符進行拼接。

(5) Set(集合)

  • 集合(set)是一個無序不重復元素的序列。
  • 基本功能是進行成員關系測試和刪除重復元素。
  • 可以使用大括號 { } 或者set()函數創建集合,註意:創建一個空集合必須用set()而不是 { },因為 { } 是用來創建一個空字典。
  • 創建格式:
parame = {value01,value02,...}
或者
set(value)

  • 實例:
#!/usr/bin/python3

student = {Tom, Jim, Mary, Tom, Jack, Rose}

print(student)   # 輸出集合,重復的元素被自動去掉

# 成員測試
if(Rose in student) :
    print(Rose 在集合中)
else :
    print(Rose 不在集合中)


# set可以進行集合運算
a = set(abracadabra)
b = set(alacazam)

print(a)

print(a - b)     # a和b的差集

print(a | b)     # a和b的並集

print(a & b)     # a和b的交集

print(a ^ b)     # a和b中不同時存在的元素

  • 以上實例輸出結果:
{‘Mary‘, ‘Jim‘, ‘Rose‘, ‘Jack‘, ‘Tom‘}
Rose 在集合中
{‘b‘, ‘a‘, ‘c‘, ‘r‘, ‘d‘}
{‘b‘, ‘d‘, ‘r‘}
{‘l‘, ‘r‘, ‘a‘, ‘c‘, ‘z‘, ‘m‘, ‘b‘, ‘d‘}
{‘a‘, ‘c‘}
{‘l‘, ‘r‘, ‘z‘, ‘m‘, ‘b‘, ‘d‘}

(6) Dictionary(字典)

  • 字典(dictionary)是Python中另一個非常有用的內置數據類型。
  • 列表是有序的對象結合,字典是無序的對象集合。兩者之間的區別在於:字典當中的元素是通過鍵來存取的,而不是通過偏移存取。
  • 字典是一種映射類型,字典用"{ }"標識,它是一個無序的鍵(key) : 值(value)對集合。
  • 鍵(key)必須使用不可變類型。
  • 在同一個字典中,鍵(key)必須是唯一的。
#!/usr/bin/python3

dict = {}
dict[one] = "1 - Python教程"
dict[2]     = "2 - Python工具"

tinydict = {name: demo,code:1, site: www.demo.com}


print (dict[one])       # 輸出鍵為 ‘one‘ 的值
print (dict[2])           # 輸出鍵為 2 的值
print (tinydict)          # 輸出完整的字典
print (tinydict.keys())   # 輸出所有鍵
print (tinydict.values()) # 輸出所有值

以上實例輸出結果:

1 - Python教程
2 - Python工具
{‘name‘: ‘demo‘, ‘site‘: ‘www.demo.com‘, ‘code‘: 1}
dict_keys([‘name‘, ‘site‘, ‘code‘])
dict_values([‘demo‘, ‘www.demo.com‘, 1])
  • 構造函數 dict() 可以直接從鍵值對序列中構建字典如下:
  • 實例
>>>dict([(demo, 1), (Google, 2), (Taobao, 3)])
{Taobao: 3, demo: 1, Google: 2}

>>> {x: x**2 for x in (2, 4, 6)}
{2: 4, 4: 16, 6: 36}

>>> dict(demo=1, Google=2, Taobao=3)
{Taobao: 3, demo: 1, Google: 2}

  • 另外,字典類型也有一些內置的函數,例如clear()、keys()、values()等。
  • 註意:
    • 1、字典是一種映射類型,它的元素是鍵值對。
    • 2、字典的關鍵字必須為不可變類型,且不能重復。
    • 3、創建空字典使用 { }。

Python數據類型轉換

  • 有時候,我們需要對數據內置的類型進行轉換,數據類型的轉換,你只需要將數據類型作為函數名即可。
  • 以下幾個內置的函數可以執行數據類型之間的轉換。這些函數返回一個新的對象,表示轉換的值
函數描述
int(x [,base]) 將x轉換為一個整數
float(x) 將x轉換到一個浮點數
complex(real [,imag]) 創建一個復數
str(x) 將對象 x 轉換為字符串
repr(x) 將對象 x 轉換為表達式字符串
eval(str) 用來計算在字符串中的有效Python表達式,並返回一個對象
tuple(s) 將序列 s 轉換為一個元組
list(s) 將序列 s 轉換為一個列表
set(s) 轉換為可變集合
dict(d) 創建一個字典。d 必須是一個序列 (key,value)元組。
frozenset(s) 轉換為不可變集合
chr(x) 將一個整數轉換為一個字符
unichr(x) 將一個整數轉換為Unicode字符
ord(x) 將一個字符轉換為它的整數值
hex(x) 將一個整數轉換為一個十六進制字符串
oct(x) 將一個整數轉換為一個八進制字符串
數據類型轉換分類:
  • 數據類型轉換一共分為2類:自動數據類型轉換(隱式轉換)和強制數據類型轉換(顯示轉換)
自動數據類型轉換/隱式轉換
  • 自動類型轉換是程序根據運算要求進行的轉換,不需要人工幹預 1.自動類型轉換不需要人工幹預 2.自動類型轉換多發生在運算或者判斷過程中 3.轉化時向著更加精確的類型轉換
強制類型轉換/顯示轉換
  • 根據程序需要,由編寫程序人員人為改變數據類型的方式就是強制數據類型轉換。

  • int() 將其他類型轉化為整型

1.數字整型轉化之後,還是原來的味道
2.浮點類型轉化之後,舍去小數部分
3.布爾值轉化之後 True -> 1 False->0
4.字符串轉換,僅純整型字符串可以轉化(浮點型或者帶有其他字符都不可以轉化)
5.復數不可以轉換
  • float() 將其他類型轉化為浮點型
1.整型轉換之後變為浮點型,後面+.0
2.浮點數不需要轉化,轉化也不會變化
3.布爾值轉化 True->1.0  False ->0.0
4.字符串,純整型字符串和純浮點型字符串可以轉換,其他都不可以
  • complex() 將其他數據轉化為復數
1.整型轉換之後變為 (整型+0j)
2.浮點型轉換之後變為(浮點型 + 0j)
3.布爾值轉化之後 True->(1+0j) False(0j)
4.字符串,純整型和浮點型字符串可以轉化,其他都不行
5.復數,無需轉換
  • bool() 將其他類型轉化為布爾值
#下面轉化為布爾值false的情況
    1.整型   0
    2.浮點型  0.0
    3.復數  0+0j
    4.布爾  False
    5.字符串  ‘‘ 空字符串
    6.列表   [] 空列表
    7.元組   ()空元組
    8.字典   {} 空字典
    9.集合   set() 空集合
  • str() 將其他類型轉化為字符串

    • 所有轉換均改變類型為字符串,表示方式依舊不變
  • list() 將其他類型轉化為列表類型

    • 在python中有5中可叠代序列,可以互相轉換,他們分別是:
    • 字符串,列表,元組,字典,集合
var = (‘張三‘,‘李四‘,‘王老五‘)

newvar = list(var)

newvar的值為 [‘張三‘,‘李四‘,‘王老五‘]
  • 註意:

    • 1.字符串轉換時每個字符變成列表中的一個值
    • 2.字典類型轉換時,僅將字典的鍵部分轉換成列表,忽略值部分
  • tuple() 將其他類型轉化為元組類型

var = {‘張三‘,‘李四‘,‘王老五‘}

newvar = tuple(var)

newvar的值為 (‘張三‘,‘李四‘,‘王老五‘)
  • 註意:
    • 1.字符串轉換時每個字符變成元組中的一個值
    • 2.字典類型轉換時,僅將字典的鍵部分轉換成元組,忽略值部分
  • set() 將其他類型轉化為集合類型
var = [‘張三‘,‘李四‘,‘王老五‘]

newvar = set(var)

newvar的值為 {‘張三‘,‘李四‘,‘王老五‘}  #值的順序不定
  • 註意:
    • 1.字符串轉換時每個字符變成集合中的一個值
    • 2.字典類型轉換時,僅將字典的鍵部分轉換集合,忽略值部分
  • dict() 將其他類型轉換為字典類型
  • 其他類型轉化為字典時需要按照指定的格式才可以轉化:(列表和元組的組合可以)
[[‘cat‘, ‘黑貓警長‘], [‘mouse‘, ‘一只耳‘], [‘next‘, ‘請看夏季‘]]
[(‘cat‘, ‘黑貓警長‘), (‘mouse‘, ‘一只耳‘), (‘next‘, ‘請看夏季‘)]

python基礎-1.4 Python數據類型