python基礎之dict、set及字符

python基礎之dict、set及字符串處理

本節內容

  1. 字典介紹及內置方法
  2. 集合介紹
  3. 字符串處理

1.字典介紹及內置方法

字典是python中惟一的映射類型,採用鍵值對(key-value)的形式存儲數據。python對key進行哈希函數運算,根據計算的結果決定value的存儲地址,因此字典是無序存儲的,且key必須是可哈希的。可哈希表示key必須是不可變類型,如:數字、字符串、元組。python

字典(dictionary)是除列表之外python之中最靈活的內置數據結構類型。列表是有序的對象結合,字典是無序的對象集合。二者之間的區別在於:字典當中的元素是經過鍵來存取的,而不是經過偏移存取。git

字典建立方法

第一種建立方法api

1 dic1={"name":"xxx","age":22}

 

第二種建立方法,使用dict()類(工廠函數)建立,dict裏面傳遞的參數能夠是字典,列表或者其餘可迭代的對象數組

1 dic1=dict((("name","xxx"),))
2 dic1=dict([["name","xxx"]])
3 a=[1,2,3]
4 b=["a","b","c"]
5 dic1=dict(zip(a,b))

 

字典的操做

  • 數據結構

    1 dic1={"name":"xxx","age":22}
    2 dic1["hobby"]="girl"
    3 dic2=dic1.setdefault("age",18) #使用setdefault方法假如字典中有該key,則返回原來的value並不修改value
    4 dic2=dic1.setdefault("hobby","girl")#假如字典中沒有該key,則添加該key,value對並返回新增長的value

     

  • 函數

    1 dic2={"name":"xxx","age":22}
    2 dic2["name"] #經過key獲取value
    3 print(dic2.keys())#返回全部的key
    4 print(dic2.values())#返回全部的value
    5 print(dic2.items())#返回全部的item
    6 print(dic2.get("name"))#經過get方法獲取某個key對應的value

     

  • spa

    1 dic3={"name":"xxx","age":22}
    2 dic4={"age":33,"hobby":"girl"}
    3 dic3.update(dic4)#假如dic4中的key在dic3中存在,那麼覆蓋dit3中的value,不然添加這個鍵值對到dic3中
    4 dic3["name"]="alex2"#修改字典中對應key的value
    5 dic3["name"]="abc"#經過key對字典進行修改

     

  • code

    1 dic5={"name":"xxx","age":22}
    2 dic5.clear()#清空該字典內容
    3 del dic5['name']#經過key刪除某個鍵值對
    4 print(dic5.popitem())#popitem將隨機刪除字典中的一個item並將該item返回
    5 print(dic5.pop("name"))#刪除指定key對應的鍵值對,並返回該鍵對應的value
    6 del dic5#刪除該字典

     

  • 其餘操做及方法orm

    dict.fromkeys方法也能夠建立字典,建立字典方式以下:對象

    1 dic6=dict.fromkeys(['host1','host2','host3'],'test')
    2 print(dic6)#{'host3': 'test', 'host1': 'test', 'host2': 'test'}
    3 dic6['host2']='abc'
    4 print(dic6)

     

    可是經過這種方式建立的字典的value初始都是同一個值,假以下面這種狀況就會出現異常:

    1 dic6=dict.fromkeys(['host1','host2','host3'],['test1','tets2'])
    2 print(dic6)
    3 {'host2': ['test1', 'tets2'], 'host3': ['test1', 'tets2'], 'host1': ['test1', 'tets2']}
    4 dic6['host2'][1]='test3'
    5 print(dic6)
    6 {'host3': ['test1', 'test3'], 'host2': ['test1', 'test3'], 'host1': ['test1', 'test3']}

     

    說明這裏面的value相似於淺拷貝同樣的效果,修改value中的列表的內容的時候,全部value都修改了。

    dict.copy()方法是對字典的淺拷貝,返回一個和以前字典有相同內容的新字典

    dict沒有內置sort方法,要對字典進行排序須要使用sorted(dict)方式,默認是根據key來進行排序,也能夠根據value或者自定義方式來排序。如sorted(dict.values())就是根據value進行排序。

2.集合介紹

集合定義:把不一樣的可hash的元素放在一塊兒就是一個集合。

集合的特色:沒有重複值,值必須是可hash的。

集合的聲明:a=set(「序列」) 裏面的序列能夠是一個字符串,能夠是一個列表,也能夠是一個字典(是字典的話,只能存儲字典的key)

不可變集合:經過frozenset(「序列」)能夠建立不可變集合,不可變集合和集合之間的關係和list和tuple之間的關係差很少

集合方法:

1 a = set([1, 2, 3, 4, 5]) a.add(6) # 沒有返回值,添加一個元素,若是添加的元素在set裏面的話,set的內容將不會被改變
2 
3 a.update("hello") # Update a set with the union of itself and others將一個序列轉換成set並取並集給原來的set
4 
5 a.clear() # 清空集合的內容
6 
7 a.remove(4) # 刪除集合裏面指定的key
8 
9 a.pop() # 隨機刪除集合中的一個key並返回這個key

 

集合間的關係:

 1 a=set([1,2,3,4,5])
 2 
 3 b=set([4,5,6,7,8])
 4 
 5 求交集:intersection
 6 
 7 print(a.intersection(b))
 8 
 9 print(a&b)
10 
11 求並集:union
12 
13 print(a.union(b))
14 
15 print(a|b)
16 
17 求差集:difference
18 
19 print(a.difference(b))
20 
21 print(b-a)
22 
23 求對稱差集 反向交集:symmetric_difference
24 
25 print(a.symmetric_difference(b))
26 
27 print(a^b)
28 
29 print((a | b)-(a&b)) # 使用並集減去交集也能獲得相同結果 集合之間能夠有-運算,可是沒有+運算
30 
31 求父集 超集:issuperset父集 issubset子集
32 
33 print(a.issuperset(b)) # a>=b
34 
35 print(a>=b)
36 
37 print(a.issubset(b)) # a<=b
38 
39 print(a<=b)
40 
41 print(a=>b) # a包含b
42 
43 print(a<=b) # b包含a
44 
45 print(a==b) # a和b等價

 

3.字符串處理

字符串處理方法比較多,下面經過分類來進行解釋字符串的一些方法:

字母處理方法:

所有大寫:str.upper()
所有小寫:str.lower()
大小寫互換:str.swapcase()
整個字符串首字母大寫,其他小寫:str.capitalize()
每一個單詞的首字母大寫:str.title()

 

格式化相關

獲取固定長度,右對齊,左邊不夠用默認用空格補齊,可自行在第二個參數中設置補充字符:str.rjust(width,"*")
獲取固定長度,左對齊,右邊不夠用默認用空格補齊,可自行在第二個參數中設置補充字符:str.ljust(width,"*")
獲取固定長度,中間對齊,兩邊不夠用默認空格補齊,可自行在第二個參數中設置補充字符:str.center(width,"*")
獲取固定長度,右對齊,左邊不足用0補齊:str.zfill(20)
使用format格式化輸出,用{}包裹變量,(若是字符串中含有{}的話,左括號弄成{{,右括號弄成}}實現大括號轉義):str.format(變量名=值)
使用format_map格式化輸出,用{}包裹變量,(若是字符串中含有{}的話,左括號弄成{{,右括號弄成}}實現大括號轉義)和format區別是傳遞參數形式不同:str.format_map(dict)

 

字符串搜索相關

搜索指定字符串,沒有返回-1:str.find('t')
指定起始位置搜索:str.find('t',start)
指定起始及結束位置搜索:str.find('t',start,end)
從右邊開始查找:str.rfind('t')
上面全部方法均可用index代替,不一樣的是使用index查找不到會拋異常,而find返回-1
搜索到多少個指定字符串:str.count('t')

 

字符串替換相關

替換old爲new:str.replace('old','new')
替換指定次數的old爲new:str.replace('old','new',maxReplaceTimes) 

 

字符串去空格及去指定字符

去兩邊空格,換行符,製表符等:str.strip()
去左空格,換行符,製表符等:str.lstrip()
去右空格,換行符,製表符等:str.rstrip()
去兩邊字符串:str.strip('d'),相應的也有lstrip,rstrip

 

按指定字符分割字符串爲數組:

默認按空格分隔,也可按照自定義分隔符分隔,第二個參數能夠指定最大分隔次數:str.split(' ',maxnum)
從右往左默認按空格分隔,也可按照自定義分隔符分隔,第二個參數能夠指定最大分隔次數:str.rsplit(' ',maxnum)

 

字符串判斷相關

是否以start開頭:str.startswith('start')
是否以end結尾:str.endswith('end')
是否全爲字母或數字:str.isalnum()
是否全字母:str.isalpha()
是否全數字:str.isdigit()
是否全小寫:str.islower()
是否全大寫:str.isupper()
相關文章
相關標籤/搜索