Python數據類型方法整理

 
前言:主要是對Python數據類型做一個整理,部分知識點源於《python3程式開發指南(第二版)》
 

一、Python的關鍵要素

1.1 要素1:數據類型

  int類型
 str類型
組合數據類型:
     元組
     列表
     字典
     集合
 
組合數據類型的區別:
     1.形式不一樣:列表是[]形式,元組()形式,字典、集合是{}形式
     2.可變不可變:列表、字典、集合可變,元組不可變
     3.哈希不可哈希:列表、字典、集合不可哈希,字元串str、數字、元組tuple可哈希
       可哈希的數據類型,即不變的數據結構 (字元串、整數、元組)
       不可哈希的數據類型,即可變的數據結構 (字典dict,列表list,集合set)
     4.有序無序:列表、元組有序,字典、集合無序
     5.集合的元素,字典的key必須是可哈希的
     6.集合中的元素都是不重複的,元組和列表可以重複
     7.支援的內置方法不同

二、數據類型

  組合數據類型是對象,因此每種數據類型都有自己的方法。Python所有變數實際上是對象引用

2.1 標識符與關鍵字

    Python的關鍵字
Python標識符命名規範:
  1. 由字元(A~Z 和 a~z)、下劃線和數字組成,但不能以數字開頭;
  1. 不能以python中的關鍵字命名;
    • 2.1. 不能與Python關鍵字同名
    • 2.2 不能與Python內置數據類型(如int/float/list/str/tuple)同名
    • 2.3. 不能與Python內置函數名與異常名作為標識符名
  1. Python中的標識符中,不能包含空格、@、% 以及 $ 等特殊字元。
  1. Python 中,標識符中的字母是嚴格區分大小寫的,相同單詞大小格式不同代表意義不同,如:
    • number = 0
    • Number = 0
    • NUMBER = 0
  1. 變數名命名要有意義,最好見名知意,提高程式碼可讀性
  1. 推薦使用大小駝峰型(GuessAge或guessAge)和下劃線(guess_age)來命名;
  1. 常量通常使用大寫來定義
  1. Python 語言中,以下劃線開頭的標識符有特殊含義,例如:
    • 以單下劃線開頭的標識符(如 _width),表示不能直接訪問的類屬性,其無法通過 from…import* 的方式導入;
    • 以雙下劃線開頭的標識符(如__add)表示類的私有成員;
    • 以雙下劃線作為開頭和結尾的標識符(如 __init__),是專用標識符。
    因此,除非特定場景需要,應避免使用以下劃線開頭的標識符。
 

2.2 Integral類型

內置Integral類型:int、浮點類型(浮點數、複數、十進位數字)、布爾值,True表示1,False表示0

2.2.1 整數

  •                   圖:數值型操作與函數
 

2.3 字元串

 字元串可以使用引號創建,python中字元串是不可變對象。字元串是一個有序的字元的集合,一對單,雙或三引號中間包含的內容稱之為字元串,其中三引號可以由多行組成

2.3.1字元串轉義

2.3.2 字元串運算符

2.3.3 字元串格式化
 

2.3.4 字元串操作方法

  字元串可以取切片(通過索引、步長值取值)
語法格式:
  • seq = “abcdefg”
  1.   [:] 提取從開頭(默認位置0)到結尾(默認位置-1)的整個字元串
  2. seq[start]  

     如: seq[1],取第二個字元「b」

      3. [start:] 從start 提取到結尾

      4.  [:end] 從開頭提取到end – 1
      5. seq[start:end]     

    如: seq[1:3] 包含上邊界不包含下邊界,因此取值為”bc”

    如: seq[1:]  取值從第二個字元至結尾:”bcdefg”

     6.  seq[start:end:step]  如seq[1:4:2]步長值為2,因此取值”bd”

     7.   負索引:-1表示最後一個字元

  seq可以是任意序列,比如列表、字元串或元組,start、end、step必須是整數,
 
 
2.3.5  string模組
 

2.4  元組

  所謂元組的不可變指的是元組所指向的記憶體中的內容不可變。

2.4.1 元組的內置方法

2.4.2 訪問元組

  元組可以使用下標索引來訪問元組中的值
  

#!/usr/bin/python3
 tup1 = ('Google', 'Runoob', 1997, 2000)
 print (tup1[0])
 print (tup2[1:5])

2.4.3 修改元組

  元組中的元素值是不允許修改的,但我們可以對元組進行連接組合,如下實例:
 tup1 = (12, 34.56)
 tup2 = ('abc', 'xyz')
# 以下修改元組元素操作是非法的。# tup1[0] = 100
#創建一個新的元組,可進行元組合併
 tup3 = tup1 + tup2
 print (tup3)

2.4.4 刪除元組

  元組中的元素值是不允許刪除的,但我們可以使用del語句來刪除整個元組,如下實例:
tup = ('Google', 'Runoob', 1997, 2000)
del tup

2.4.5 元組運算符

  與字元串一樣,元組之間可以使用 + 號和 * 號進行運算。這就意味著他們可以組合和複製,運算後會生成一個新的元組。
 

2.5 列表

2.5.1  列表方法

2.5.2 列表內涵

     Python列表內涵(List Comprehensions,也譯作「列表推導式」)是Python有力的語法之一,常用於從集合對象中有選擇地獲取並計算元素,雖然多數情況下可以使用for、if等語句組合完成同樣的任務,但列表內涵書寫的程式碼更簡潔(當然有時可能會不易讀)。
  列表內涵是一個表達式,也是一個循環,該循環有一個可選的,包含在方括弧中的條件,作用是為列表生產數據選項,並且可以使用條件過濾掉不需要的數據項。
列表內涵最簡單的形式如下:
      [item for item in iterable]
  上面的語句將返回一個列表,其中包含iterable中的每個數據項,在語義上與list(iterable)是一致的。有兩個特點使得列表內涵具有更強大的功:一個是可以使用表達式,另一個是可以附件條件,由此帶來如下兩種實現列表內涵的常見語法格式:
    [expression for item in iterable]

         [expression for item in iterable if condition]

第二種 相當於
   temp=[]
   for item in iterable:
        if condition:
             temp.append(item)

 

例子1:指定生成閏年方式
   

leaps=[]
   for year in range(1900,1940):
       if(year%4==0 and year%100!=0)or (year%400==0)
           leaps.append(year)  
使用列表內涵
 leaps=[y for y in range(1900,1940) if(y%4==0 and y%400!=0) or(y%400=0)] 
例子2:計算50以內的和
print(sum([i for i in range(1,51)]))
print(sum(range(1, 51)))
例子3:計算九九乘法表
s = [(x, y, x*y) for x in range(1, 10) for y in range(1,10) if x>=y] 

 

2.6 集合

Python提供兩種內置的集合類型:可變的set類型,固定的frozenset類型。
集合特性:
1.集合元素必須是可哈希即不可變數據類型(比如float,frozenset,int,str,touple)
2.集合元素是無序的,不能使用索引、切片取值
只有可哈希運算的對象可以添加到集合中,所有固定的數據類型(比如float,frozenset,int,str,touple)都是可哈希運算的,可以添加到集合中。內置的可變數據類型(比如list,dictset)都是不可哈希的,因為其哈希值會隨著包含項數的變化而變化,因此,這些數據類型都是不能添加到集合中的。
集合是0個或多個對象引用的無序組合,這些對象所引用的對象都是可哈希運算的。幾個是可變的,但由於其中的項是無序的,因此沒有索引位置,不能分片或按步距分片。
2.6.1 集合方法與操作符

2.6.2 集合內涵

集合內涵是一個表達式,也是一個帶有可選條件(包含在花括弧中)的循環,與列表內涵類似,也支援兩種語法格式
{expression for item in iterable}
  •    {expression for item in iterable if condition}
  • 我們可以使用上面語法過濾,下面給出一個實例:
  • Html = {x for x in files if x.lower().endswith((‘.htm’,’.html’))}   意思是集合html只存放那些以.htm或.html結尾的文件名這裡不區分大小寫
 

2.7 映射類型

字典特性:
   1.key是可哈希運算的對象即(比如float,frozenset,int,str,touple)
  • 2.字典的鍵是不能重複的,獨一無二
  •  3.字典是無序的,不能通過索引取切店
         4. 字典是可變的
字典的方法:
python 字典 setdefault()和get()方法比較
  dict.setdefault(key, default=None)  –>  有key獲取值,否則設置 key:default,並返回default,default默認值為None,會修改原字典
  dict.get(key, default=None)  –>  有key獲取值,否則返回default。default默認值為None。
 
 
字典內涵
  兩種語法格式:
  [keyexpression:valueexpression for key, value in iterable]
  [keyexpression:valueexpression for key, value in iterable if condition]
實例一:如果使用字典內涵創建字典,鍵為當前目錄中文件的文件名,值為以位元組計數的文件大小
os.listdir()返回傳遞給函數的路徑中包含的文件與目錄列表但列表中不會包含"."".."
os.path.getsize()函數返回給定文件的大小(以位元組計數)
file_sizes = {name:os.path.getseize(name) for name in os.listdir(".")}
file_sizes = {name:os.path.getseize(name) for name in os.listdir(".")
if os.path.isfile(name)}

 

字典內涵可用於創建反轉目錄,比如給定字典d,生成一個新字典,新字典的鍵是d的值,值是d的鍵
  inverted_d = {v:k for k,v in d.items()}

 

Tags: