1. 程式人生 > >Python全棧開發之數據類型

Python全棧開發之數據類型

顯示 app 索引 子字符串 \n slow 步長 getattr 並且

字符串

Python字符串對象提供了大量方法用於字符串的檢測、替換和排版等操作,另外還有大量內置函數和運算符也支持對字符串的操作,字符串對象是不可變的,所以字符串對象提供的字符串方法都是返回修改後的新字符串

  • find() 檢測一個字符串是否包含在另一個字符串中,如果找到返回開始的索引值,否則返回-1
  • rfind() 類似於find()函數,不過是從右邊開始查找
  • index() 和find()方法一樣,只不過如果字符串不在另一個字符串中會報一個異常.
  • rindex() 類似於index(),不過是從右邊開始查找
  • count() 返回一個字符串在另一個字符串中出現的次數
  • split(str[,num]) 以str為分隔符切片string,如果num有指定值,則僅分隔num個子字符串
  • rsplit(str[,num]) 以str為分隔符切片字符串,如果num有指定值,則僅分隔num個子字符串
  • partition(str) 從str出現的第一個位置起,把字符串分成一個3元素的元組
  • rpartition(str) 類似於partition函數不過是從右邊開始查找.
  • join(str) 以str作為分隔符,將seq中所有的元素合並為一個新的字符串
  • lower() 轉換字符串中所有大寫字符為小寫.
  • upper() 轉換字符串中的小寫字母為大寫
  • capitalize() 首字母大寫
  • title() 返回標題化的字符串,每個單詞首字母都是大寫
  • swapcase() 翻轉字符串大小寫
  • replace(str1,str[,num]) 把字符串中的str1替換成str2,如果num指定,則替換不超過num次.
  • strip() 刪除字符串兩邊的空格
  • rstrip() 刪除字符串末尾的空格.
  • lstrip() 刪除字符串左邊的空格
  • startswith(str) 檢查字符串是否以str開始,如果是,返回 True,否則返回 False
  • endswith(str) 檢查字符串是否以str結束,如果是,返回 True,否則返回 False
  • isalnum 如果字符串中存在一個數字則返回True,否則返回False
  • isalpha() 全部為字母返回True,否則返回False
  • isdigit() 全部為數字返回True,否則返回False
  • isspace() 如果字符串中只包含空格,則返回True,否則返回False
  • isupper() 如果字符串中包含至少一個區分大小寫的字符,並且所有這些字符都是大寫,則返回 True,否則返回 False
  • islower() 如果字符串中包含至少一個區分大小寫的字符,並且所有這些字符都是小寫,則返回 True,否則返回 False
  • center() 返回指定長度的字符串,居中對齊,以空格填充
  • ljust() 返回指定長度的字符串,左對齊,以空格填充
  • rjust()返回指定長度的字符串,右對齊,以空格填充
  • zfill() 反hi制定長度的字符串,左對齊,在左側填充數字0

列表

列表是最重要的Python內置對象之一,是包含若幹元素的有序連續內存空間,當列表增加或刪除元素時,列表對象自動進行內存的擴展和收縮,從而保證相鄰元素之間沒有縫隙

  • append(x) 將x添加到列表尾部

  • extend(L) 將列表L內所有元素追加到列表尾部

  • insert(x,index) 在列表index的位置插入x,如果index為整數或者大於列表長度,則將x添加到列表尾部,如果index為負數或者小於列表長度的相反數則在列表頭部插入x

  • remove(x) 在列表中刪除第一個值為x的元素

  • pop([index]) 彈出索引為index的值,如果不指定index則刪除最後一個怨怒是

  • clear() 清空列表,保留列表對象

  • index(x) 返回x的索引,如果不存在則拋出異常

  • count(x) 返回x在列表中出現的次數

  • reverse() 將列表逆轉

  • sort(key=None,reverse=False) 對列表中的元素進行排序,key表示排序規則,False表示升序,True表示降序

  • copy() 淺拷貝
L1 = [1,2,3,4]
L2 = [5,6,7,8]
L1 = L1+L2 會產生並返回一個新列表
L1 += L2 實質上是調用extend,並不會產生新列表,效率比+高,推薦使用+=
  • 列表推導式
    [x*x for x in range(10)]
    # 實現嵌套列表的平鋪
    vec=[[1,2,3],[4,5,6],[7,8,9]]
    [num for elem in vec for num in elem] # 輸出[1,2,3,4,5,6,7,8,9]
    # 過濾不符合元素
    import os
    [filename for filename in os.listdir(‘.‘) if filename.endswith(‘.py‘)]
    # 同時遍歷多個列表或可叠代對象
    [(x,y) for x in range(1,4) for y in range(1,6,2) if x==y] 輸出[(1, 1), (3, 3)]
    # 使用列表推導式實現矩陣轉置
    mattrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
    [[row[i] for row in mattrix] for i in range(10)]# 輸出[[1,5,9],[2,6,10],[3,7,11],[4,8,12]]
    # 列表推導式可以使用函數或復雜表達式
    def fun(x):
    if x%2==0:
        return x**2
    else:
        return x+1
    [fun(x) for x in range(4) if x>0] # 輸出[2,4,4,16]
    # 列表推導式支持文件叠代
    with open(‘my.ini‘,‘r‘) as f:
    print([line for line in f])
    # 使用列表推導式生成100以內的素數
    from math import sqrt
    [p for p in range(2,100) if 0 not in [p%d for d in range(2,int(sqrt(p)+1))]]
  • 犀利的切片

    使用切片獲取列表部分元素

    num_list = list(range(10))
    num_list[::] # 返回包含原列表中所有元素的新列表
    num_list[::-1] # 返回包含原列表中所有元素的逆序列表
    num_list[::2] # 隔一個取一個,返回包含原列表中偶數位置的列表
    num_list[1::2] # 隔一個取一個,返回包含原列表中奇數位置的列表
    num_list[3:6] # 指定切片的起始位置
    num_list[0:100] # 切片結束位置大於列表長度時,從列表尾部截斷
    num_list[100] # 拋出異常,不允許越界訪問
    num_list[100:] # 切片開始位置大於列表長度時,返回空列表 

    使用切片為列表增加元素

    num_list[len(num_list):]=[9] # 在列表尾部插入元素
    num_list[:0]=[1,2] # 在列表頭部插入多個元素
    num_list[3:3]=[4] # 在列表的某個位置插入元素

    使用切片替換和修改列表中的元素

    num_list[:3]=[1,2,3] # 替換元素,等號兩邊的列表長度必須相等,否則拋出異常
    num_list[3:] = [4,5,6] # 連續替換
    num_list[::2]=[0]*3 # 隔一個替換一個
    num_list[1::2]=range(3) # 從開始位置隔一個替換一個

    使用切片刪除列表中的元素

    num_list[:3]=[] # 刪除前三個元素
    del num_list[::3] # 刪除前三個元素
    del num_list[::2] # 隔一個刪除一個

    元組

  • 元組與列表的異同點

    列表和元組都屬於有序集合,都支持雙向索引訪問內部,以及使用count()、index()、len()、map()、filter()、等大量內置函數和+、*、+=、in等運算符,元組屬於不可變序列,列表屬於可變序列,因此,元組沒有提供append()、insert()、extend()等方法,同樣元組也沒有提供remove()、pop()方法,不能使用del刪除元組中的元素,只能使用del刪除整個元組,元組可以使用切片,但是只能使用切片訪問元素,不支持修改和刪除操作,而且元組在內部做了大量優化,因此,元組的效率比列表要高,訪問速度要比列表高許多,建議使用元組,因為元組的不可變性決定了使用元組更加安全可靠

  • 生成器推導式

    生成器推導式在用法上和列表推導式類似,形式上使用()作為定界符,最大的不同時生成器返回的是一個生成器對象,生成器對象和叠代器對象類似,都具有惰性的特點,只在調用時才會產生新元素,比列表推導式具有更高的效率,空間占用率低,適用於大數據的場景,使用生成器產生元素時,可以將其轉換為列表、元組,也可以使用生成器對象的next()方法和next()進行遍歷,或者直接使用for循環遍歷,但是無論哪種形式,只能從前往後訪問其中的元素,不可以訪問已經訪問過的元素

    g=(i**2 for i in range(10)) # 創建生成器對象
    print(g) # 輸出<generator object <genexpr> at 0x0000028366F8AAF0>
    tuple_g=tuple(g) # 將生成器對象轉換成元組
    print(tuple_g) # 輸出(0, 1, 4, 9, 16, 25, 36, 49, 64, 81)
    list_g=list(g) # 將生成器對象轉換成列表
    print(list_g) # 輸出[]
    g=(i**2 for i in range(10)) # 重新獲取生成器
    list_g=list(g) # 將生成器對象轉換成列表
    print(list_g) # 輸出[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
    g=(i**2 for i in range(10)) # 重新獲取生成器對象
    print(g.__next__()) # 輸出0
    print(next(g)) # 輸出1
    g=(i**2 for i in range(10)) # 重新獲取生成器對象
    for i in g:
    print(i,end=‘ ‘) # 輸出0 1 4 9 16 25 36 49 64 81

字典

字典中的每個元素表示一種映射關系或對應關系,根據提供的鍵作為下標,可以訪問對應的值,如果不存在這個鍵

會拋出異常,內置函數len()、max()、min()、sum()、sorted()、map()、filter()、enumerate()等同樣適用於字典

  • get(x[,y]) 如果字典中存在該鍵則返回對應的值,否則返回指定值

  • setdefault(x[,y]) 指定的鍵存在,返回對應的值,如果鍵不存在,就添加一個新元素並設置對應值默認為None

  • values() 遍歷字典的值

  • keys() 遍歷字典的鍵

  • items() 遍歷字典的鍵和值

  • pop() 彈出指定鍵對應的元素,並返回被刪除的元素

  • clear() 清空字典中的所有元素

  • copy() 返回字典對象的淺復制

集合

集合屬於Python無序可變序列,使用一對大括號作為定界符,元素之間使用逗號分隔,同一個集合內的每個元素都是唯一的,元素之間不允許重復,集合中只能包含數字、字符串、元組等不可變類型,內置函數len()、max()、min()、sum()、sorted()、map()、filter()、enumerate()等同樣適用於字典

集合運算

num1 = {1,2,3,4,5}
num2 = {5,6,7,8,9}
print(num1|num2) # {1, 2, 3, 4, 5, 6, 7, 8, 9}
print(num1.union(num2)) # {1, 2, 3, 4, 5, 6, 7, 8, 9}
print(num1-num2) # {1, 2, 3, 4}
print(num1.difference(num2)) # {1, 2, 3, 4}
print(num1&num2) # {5}
print(num1.intersection(num2)) # {5}
  • set() 將列表、元組、字符串、range對象等其他可叠代對象轉換成集合,如果原來的數據中存在重復數據,轉換成集合後將只保留一個,如果原序列有可變類型,將無法轉換成集合,拋出異常

  • add() 將元素添加到集合中,如果集合中存在該元素將忽略此操作

  • update() 將另一個集合中的元素添加到當前集合中,並自動去除重復元素

  • pop() 隨機刪除並返回集合中的一個元素,如果集合為空則拋出異常

  • remove(x) 刪除集合中一個指定的元素,如果不存在則拋出異常

  • discard(x) 刪除集合中一個指定的元素,如果不存在則忽略此操作

  • clear() 清空集合

    內置函數

  • abs(x) 返回數字x的絕對值或復數x的模
  • all(iterable) 如果可叠代對象iterable中所有元素x都等價於True,則返回True,否則,返回False,空叠代對象返回True
  • any(iterable) 只要可叠代對象iterable存在元素x使得bool(x)為True,則返回True,空叠代對象返回False
  • ascii(obj) 把對象轉換成ASCII碼表現形式
  • bin(x) 把整數x轉換為二進制形式
  • bool(x) 返回x等價的布爾值
  • bytes(x) 生成字節串
  • callable(obj) 測試對象obj是否可調用
  • compile() 用於把Python代碼編譯成可被exec()或eval()函數執行的代碼對象
  • complex(real,[imag]) 返回復數
  • chr(x) 返回Unicode編碼為x的字符串
  • delattr(obj,name) 刪除屬性,等價於del obj.name
  • dir(obj) 返回指定對象或模塊obj的成員列表,如果不帶參數則返回當前作用域內所有標識符
  • divmod(x,y) 返回包含整商和余數的元組
  • enumerate(iterable[,start]) 返回包含元素形式為(start,iterable[0]),(start+1,iterable[1]),(start+2,iterable[2]),...的叠代器對象,start表示索引的起始值
  • eval(s[,globals[,locals]]) 計算並返回字符串s中表達式的值
  • exex(x) 執行代碼或代碼對象x
  • exit() 退出當前解釋器環境
  • filter(func,seq) 返回fiter對象,其中包含序列seq中使得單參數函數func返回值為True的那些元素,如果函數func為None則返回包含seq中等價於True的元素的filter對象
  • float(x) 把整數或字符串x轉換為浮點並返回
  • frozenset([x]) 創建不可變的集合對象
  • getattr(obj,name[,default]) 獲取對象中指定屬性的值,等價於obj.name,如果不存在指定屬性則返回default的值,如果要訪問的屬性不存在並且沒有指定的default則拋出異常
  • globals() 返回包含當前作用域內全局變量及其值的字典
  • hasattr(obj,name) 測試對象obj是否具有名為name的成員
  • hash(x) 返回對象x的哈希值,如果x不可哈希則拋出異常
  • help(obj) 返回對象obj的幫助信息
  • hex(x) 把整數x轉換為十六進制
  • id(obj) 返回對象obj的地址
  • input([提示]) 顯示提示,接受鍵盤輸入的內容,返回字符串
  • int(x[,d]) 返回實數、分數或高精度實數x的整數部分,或把d進制的字符串x轉換為十進制並返回,d默認為十進制
  • isinstance(obj,class) 測試對象obj是否屬於指定類型
  • insubclass(cls,class) 測試類cls是否為指定類型的子類,用法與isinstance()函數相似
  • iter(...) 返回指定對象的可叠代對象
  • len(obj) 返回對象obj包含的元素個數,適用於列表、元組、字典、字符串以及range對象,不適用於具有惰性求值特點的生成器對象和map、zip等叠代對象
  • list([x])、set([x])、tuple([x])、dict([x]) 把對象x轉換成為列表、集合、元組或字典並返回,或生成空列表、空集合、空元組、空字典
  • locals() 返回包含當前作用域內局部變量及其值的字典
  • map(func,*iterables) 返回包含若幹函數值的map對象,函數func的參數分別來自與iterables指定的一個或多個叠代對象
  • max(...)、min(...) 返回多個值中或者包含有限個元素的可叠代對象中所有元素的最大值、最小值,要求所有元素之間可比較大小,允許指定排序規則,參數為可叠代對象時還允許指定默認值
  • next(iterator[,default]) 返回叠代對象x中的下一個元素,允許指定叠代結束之後繼續叠代時返回的默認值
  • oct(x) 把整數x轉換為八進制串
  • open(fn[,mode]) 以指定模式mode打開文件fn並返回文件對象
  • ord(x) 返回一個字符x的Unicode字符
  • pow(x,y,z) 返回新的y次方,等價與xy或(xy)%z
  • print(value,...sep=‘‘,end=‘\n‘,file=sys.stdout,flush=False) 基本輸出函數,默認輸出到屏幕,相鄰數據使用空格分隔,以換行符結束所有數據的輸出
  • quit() 退出當前解釋器環境
  • range([start,]end[,step]) 返回range對象,其中包含左閉右開區間[start,end)內以step為步長的整數
  • reduce(func,sequence[,initial]) 將雙參數的函數func以叠代的方式從左到右依次應用至序列seq中每個元素,並把中間計算結果作為下一次計算的操作數之一,最終返回單個值作為結果(from functools import reduce)
  • repr(obj) 返回對象obj的規範化字符串表示形式,對於大多數對象有eval(repr(obj))==obj
  • reversed(seq) 返回seq(可以是列表、元組、字符串、range等對象)中所有元素逆序後的叠代器對象,不適用於具有惰性求值特點的生成器對象和map、zip等可叠代對象
  • round(x[,小數位數]) 對x進行四舍五入,若不指定小數位數,則返回整數
  • sorted(iterable,key=None,reverse=False) 返回排序後的列表,其中iterable表示要排序的序列或叠代對象,key用來指定排序規則或依據,reverse用來指定升序或降序
  • str(obj) 把對象obj直接轉換為字符串
  • sum(x,start=0) 返回序列x中所有元素之和,允許指定起始值start,返回start+sum(x)
  • type(obj) 返回對象obj的類型
  • zip(seq1[,seq2[...]]) 返回zip對象,其中元素為(seq1[i],seq2[i],...)形式的元祖,最終結果中包含的元素個數取決於所有參數序列或可叠代對象中最短的那個

Python全棧開發之數據類型