第八章 數據類型

在內存中存儲的數據可以有多種類型。Python 定義了一些標準類型,用於存儲各種類型的數據。

數據類型分為:

  1. 可變
  2. 不可變兩種。不可改變的數據類型,這意味著改變數字數據類型會分配一個新的對象。

Python中的每種數據類型都有構造函數,構造函數名稱就是類型名稱,如:int()、float()等。構造函數也可用於類似於C++的強制類型轉換。

一、numeric

[不可變]

數字數據類型用於存儲數值。

A、int(有符號整型)

B、long(長整型[也可以代表八進制和十六進制]),Python使用 L/l 來顯示長整型。

C、float(浮點型),Python將帶小數點的數字都稱為浮點數。

D、complex(複數),複數由實部和虛部構成,可以用 a + bj,或者 complex(a,b) 表示, 實部和虛部都是浮點型。

默認值:int() - 0,float() - 0.0,long() - 0,complex() - 0j

二、布爾

在Python中的布爾類型為 <type>,取值為 True 、False。/<type>

默認值 bool() - False。

認為空對象(整數0,浮點數0.0,空字符'')是False,所有非空對象是真。

三、str "xxx"或者'xxx'

[不可變][索引]

字符串是由數字、字母、下劃線組成一系列字符。Python不支持單字符類型,只有字符串類型,單字符也在Python也是作為一個字符串使用。ord/chr在ASCII與字符之間進行轉換。

默認值:str() - ''

python的字串列表有2種取值順序:

A、從左到右索引默認0開始的,最大範圍是字符串長度少1

B、從右到左索引默認-1開始的,最大範圍是字符串開頭

在Python中定義unicode字符串,需要在字符串之前增加u/U。使用type分別查看以下變量的類型

str1 = u"nihao" # <type>

str2 = "nihao" #<type>

計算機只能處理數字,如果要處理文本,就必須先把文本轉換為數字才能處理。Unicode把所有語言都統一到一套編碼裡,這樣就不會再有亂碼問題了。Unicode標準也在不斷髮展,但最常用的是用兩個字節表示一個字符(如果要用到非常偏僻的字符,就需要4個字節)。現代操作系統和大多數編程語言都直接支持Unicode。

ASCII編碼和Unicode編碼的區別:ASCII編碼是1個字節,而Unicode編碼通常是2個字節,舉例如下。

字母 A 用ASCII編碼是十進制的65,二進制的01000001;

字母 A 用Unicode編碼,只需要在前面補0就可以,因此, A 的Unicode編碼是00000000 01000001。

漢字已經超出了ASCII編碼的範圍。

python中字符串是不可修改對象。每次+=會創建一個新的字符串,性能較差,推薦使用 jion

print 使用對象的 __str__方法

  • 初始化

方式一:str() 構造函數,可以將非字符串值表示為字符串。

方式二:使用 '' 或者 ""

  • 其他對象轉換為str

str():函數,將其他對象轉換為可閱讀的str形式,主要調用對象的__str__方法,使用其返回值。

  • 轉義字符 - 見附錄五

如果需要打印轉子字符,則可以通過兩種方式實現:\\\\n 或者 R'\\n'、r'\\n'

  • 格式字符串

Python提供了更精細的字符串顯示控制方法,通過選項功能實現。有以下兩種方式:

1、在 Python 中,字符串格式化使用與 C 中 sprintf 函數一樣的語法。

print "fromat string" % (data1, data2, data3, ...) # dataN 與format string 中的%$ 相匹配。%是分隔符

每個format string的格式如下:%[name][flags][width][.precision]code

print "My name is %s and weight is %d kg!" % ('Zara', 21)

2、str.format() - Python2.6開始加入

增強了字符串格式化的功能,基本語法是通過 {} 和 : 來代替以前的 %。format 函數可以接受不限個參數,位置可以不按順序。

A、不設置指定位置,按默認順序 "{} {}".format("1", "2") # 1 2

B、設置指定位置 "{1} {0} {1}".format("1", "3") # 3 1 3

C、設置參數

key=root

a、具體參數

"{name} = {value}".fromat(name="key", value="root")

b、字典設置參數

info={"name":"key", "value":"root"}

"{name} = {value}".format(**info)

c、列表設置參數

info=["key", "root"]

"{0[0]} = {0[1]}"format(info) # 0是必須的

d、對象

class info(object):

def __init__():

self.name="key"

self.value="root"

"{0.name} = {0.value}".format(info())

說明:粗體0表示的是format後跟的參數位置

  • 字符串拼接

1、+,可以使用Python的操作符重載功能,str內部實現了 __add__,直接將兩個str拼接起來。

2、jion,連接字符串數組。"split".jion(seq) # 將字符串、元組、列表中的元素以指定的字符(分隔符)連接生成一個新的字符串

":".jion("12345") # "1:2:3:4:5"

  • 三引號

三引號的語法是一對連續的單引號或者雙引號, 允許一個字符串跨多行,字符串中可以包含換行符、製表符以及其他特殊字符。如果字符串跨越多行,行與行之間的回車也會被保留。

三引號讓程序員從引號和特殊字符串的泥潭裡面解脫出來,自始至終保持一小塊字符串的格式是所謂的WYSIWYG(所見即所得)格式的。

多用於處理HTML或者SQL語句中。

errHTML = """

<title>

Friends CGI Demo

/<title>

ERROR

%s

"""

兩個作用:

1、用作文檔註釋

2、初始化字符串變量,保留特殊字符

四、list []

[可變] [複合數據類型][有序][索引]

列表由一系列按特定順序排列的元素組成的有序集合,其中元素與元素之間沒有任何關係。

使用 [] 標識列表,元素與元素之間使用,分割。可以完成大多數集合類的數據結構實現。它支持字符,數字,字符串甚至可以包含列表。列表中的每個元素都分配一個數字表示元素的索引,元素的索引規則類似於str。

使用 [:]操作可以複製列表,列表中已經存在的元素指向同一對象,新加的元素不影響原有列表。

list1 = [1, 2, 3]

list2 = list1[:] # id(list1[0]) == idlist2([0])

# list2.append(4) 不影響 list1

  • 初始化

1、空列表 []

2、[str, int, list, long, ……]

3、list() 構造函數,list(range(begin, end)) 創建參數列表範圍內的整數列表。

4、列表解析,使用緊湊的方式創建列表。

[expression for-clause [condition]] # [elem for elem in range(1,10) if elem % 2 == 0]

expression:對每個元素執行的操作,結果當作列表的元素。# elem

for-clause:for操作的一個列表 # for elem in range(1, 10)

condition:可選的附加條件,符合條件的元素會執行expression操作。 # if elem % 2 == 0

  • 增加

list.insert(index, elem),任意位置插入元素

list.append(emel),列表末尾添加元素

  • 訪問元素

採用下標法,類似於 str ,可以使用正向從0開始,也可以採用反向從-1開始。

  • 刪除元素

del list[index] 刪除單個元素

list.pop(index) 刪除並返回指定位置的元素

list.remove(elem) 刪除首次出現的元素

五、tuple ()

[不可變][索引]

使用 () 標識元組,可以把元組理解成不可變的list。

  • 初始化

1、空元組 ()

2、(data, ),單元素元組,需要在元素後面添加逗號。這是因為括號()既可以表示tuple,又可以表示數學公式中的小括號。所以,如果元組只有1個元素,就必須加一個逗號,防止被當作括號運算。此時表示圓括號正在成為元組創建的一部分。

3、(data, data1, data2, …) 或者 data, data1, data2, … 都可以創建元組

4、tuple(list) 通過列表構建元組

  • 刪除元組

因為元組是不可變的,所以del不能刪除其中的一個元素,但是可以使用del刪除整個元組,類似於刪除變量關聯的操作一樣。

六、dict {}

[可變][無序]

使用 {} 標識字典,由索引(key)和它對應的值value組成。字典的每個鍵值對用冒號(:)分割,每個對之間用逗號(,)分割,整個字典包括在花括號({})中。

Python為了實現快速搜索,鍵沒有按順序排列,自動修改排列順序。

  • 鍵:鍵必須不可變,任意Python不可變數據類型均可當作dict的鍵,不允許同一個鍵出現兩次
  • 值:值可以沒有限制地取任何python對象,既可以是標準的對象,也可以是用戶定義的。
  • 初始化

1、空字典:{}、dict()

2、初始化字典:{key:value, key:value, ……}

3、dict() 構造函數,藉助zip運算符:dict(zip(list_k, list_v))

  • 新增、修改、訪問元素

通過dict[key]的形式進行標題提到的操作。

  • 刪除

dict.clear() 刪除字典中的所有元素

del dict[key] 刪除指定的key以及key對應的值

  • 方法

items()、keys()、values():返回列表形式

6copy()淺拷貝字典,如果值是可變的則會影響所有引用

七、set

[可變][唯一][無序]

為集合類型,是含有不重複元素的數據集。支持數據集合中的概念。set沒有快捷創建的方式,其輸出格式為 set([data, …])的形式。

  • 初始化

集合只能通過構造函數創建沒有快捷方式。

1、空集合 set()

2、set(str/list) 通過str或者list創建集合。

  • 操作

1、元素操作(方法):add、remove、clear2、支持數學集合的操作,改操作通過集合的方法實現。

相關操作

1、分片

在分片規則裡list、tuple、str(字符串)都可以稱為序列,都可以按規則進行切片操作。

[begin:end:step]

[begin, end) 選取範圍,左閉右開。begin默認值為0,end默認值為末尾

step 表示增長步長,默認為1。負數步長意味著向後進行,此時begin,end都是用默認值。

2、for

遍歷元素,可以使用的數據結構有:str、list、tuple、dict、set

for elem in xxxx:

block

3、判空

A、可以直接將對象當作 if/while 等條件語句的 expression,來判斷是否為空。支持的數據結構有:str、list、tuple、dict、set

if dict: # 如果不為空

pass

B、可以使用 len(o) 函數來判斷集合的長度。

if len(dict): #如果不為空

pass

4、排序

list[dict] 可以指定多個排序條件

  1. list.sort(key=lambda dict:(dict["key"], dict["key2"], …))
  2. list.sort(key=operator.itemgetter("key1", "key2", …)) # import operator


分享到:


相關文章: