天天看點

python set、list、tuple、dict總結

#1、set集合

set是一個無序且不重複的元素集合。

  • 不重複(可去重)
  • 元素為不可變對象
  • 集合内部隻能存放不可變的類型,數字、字元串、元組
  • 集合本身是無序的,不可以為集合建立索引或執行切片(slice)操作,也沒有鍵(keys)可用來擷取集合中元素的值

set的建立和空集合

s=set()    
           
  1. 添加
    se.add(1)
               
  2. discard()-移除不存的元素不會報錯
  3. remove()-移除不存的元素會報錯
  4. pop()-移除末尾元素
  5. intersection() -取交集
    賦給新值
     se = {11, 22, 33}
     be = {22, 55}
    
     temp1 = se.intersection(be)             #取交集,賦給新值
     print(temp1)  # 22
     print(se)  # {11, 22, 33}
    
     temp2 = se.intersection_update(be)      #取交集并更新自己
     print(temp2)  # None
     print(se)  # 22
               
  6. 判斷(isdisjoint()交集、issubset()子集、issuperset()父集)
    se = {11, 22, 33}
     be = {22}
     print(se.isdisjoint(be))        #False,判斷是否不存在交集(有交集False,無交集True)
     print(se.issubset(be))          #False,判斷se是否是be的子集合
     print(se.issuperset(be))        #True,判斷se是否是be的父集合
               
  7. 合并(se和be的并集 減去 se和be的交集)
    se = {11, 22, 33}
     be = {22,55}
    
     temp1 = se.symmetric_difference(be)  # 合并不同項,并賦新值
     print(temp1)    #{33, 11, 55}
     print(se)       #{33, 11, 22}
    
     temp2 = se.symmetric_difference_update(be)  # 合并不同項,并更新自己
     print(temp2)    #None
     print(se)             #{33, 11, 55}
               
  8. 取并集(union)
    se = {11, 22, 33}
     be = {22,44,55}
    
     temp=se.union(be)   #取并集,并賦新值
     print(se)       #{33, 11, 22}
     print(temp)     #{33, 22, 55, 11, 44}
               
    合并且更新
    se = {11, 22, 33}
     be = {22,44,55}
    
     se.update(be)  # 把se和be合并,得出的值覆寫se
     print(se)
     se.update([66, 77])  # 可增加疊代項
     print(se)
               
  9. 類型轉化
    se = set(range(4))
     #set ->list
     li = list(se)
     #set ->tuple
     tu = tuple(se)
     #set ->str
     st = str(se)
               

#2、List

  • 清單的資料項不需要具有相同的類型
  • 清單可以完成大多數集合類的資料結構實作。它支援字元,數字,字元串甚至可以包含清單
  • 加号 + 是清單連接配接運算符,星号 * 是重複操作。
  1. 統計(count())
    fruits = ['orange', 'apple', 'pear', 'banana']
        print (fruits.count('apple'))
               
  2. 判斷是否存在(index()、in)
    print (fruits.index('apple')) #如果沒有找到會異常
    	print ('apple' in fruits)
    	    		   
        從第三個位置開始尋找
        print (fruits.index('apple',3))
        #會報錯的方法不推薦使用,通常使用in
               
  3. 反轉(reverse())
    fruits.reverse()
               
  4. 排序(sort())
    fruits.sort()
               
  5. 增加元素(append()、extend())
    fruits.append('kiwi')
    	# 增加集合
    	fruits.extend(['kiwi','water'])
               
  6. 合并兩個清單
    new_fruits=fruits+['kiwi','water']
               
  7. 插入元素(insert())
    fruits.insert(0,'pick');
               
  8. 删除元素(remove()、del、分片)
    fruits.remove('apple')
    	fruits.remove(fruits[2])
    	del fruits[1]
    	# 删除單個元素
    	fruits[1:2]=[]
    	# 删除多個元素
    	fruits[2:4]=[]
               
  9. 删除聊表末尾的元素(pop())
    fruits.pop()
        fruits.pop(index)  #删除指定位置的元素
               
  10. 替換元素(分片)
    fruits[0:3]=['橙子','蘋果','梨']
               
  11. 拷貝(分片、copy())
    ff=fruits[:]
       fff=fruits.copy()
               
  12. 清空元素(clear()、del、分片)
    fruits.clear()
       del fruits[:]  #不同于del fruits
       fruits[ : ]=[]
               
  13. 最大最小值(max()、min())
    print(max(fruits))
       print(min(fruits))
               
  14. 多元數組
    list01=[1,3,[5,7,9,11]]
               
    1. 淺拷貝(清單内元素位址發生改變,用id()檢視,二維數組内位址不會改變)
      list02=list01.copy()
      	list03=list01[:]
                 
    2. 深拷貝(清單内元素位址完全改變,包括二維數組位址)
      import copy		
      	list02=copy.deepcopy(list01)  
                 
  15. 類型轉化
    #list -> str
       list01 = ['I','love','python']
       list_str = str(list01)          #方式一  ['I', 'love', 'python']
       list_str01 = ''.join(list01)    #方式二  Ilovepython
       
       #list -> set
       list02 = set(list01)
    
       #list -> tuple
       list03 = tuple(list01)
               
  16. list去重
方法一:建立新數組

    list01 = [1,2,2,3,6,7,8,9]
    list02 = []
    for i in list01:
        if i not in list02:
            list02.append(i)
    print(list02)

方法二:

    list01=[1,2,2,2,3,4,2,5,4,2]
		le=len(list01)
		i=0
		while i<le-1:
		    j=i+1
		    while j<le:
		        if list01[i]==list01[j]:
		            list01.remove(list01[i])
		            le-=1
		            i-=1
		            break
		        j+=1
		    i+=1					
		print(list01)
		
		
方法三:(删除後面所有與目前元素相同的元素)

    list01=[1,2,2,2,3,4,2,5,4,2]
		le=len(list01)
		i=0
		while i<le-1:
		    j=i+1
		    while j<le:
		        if list01[i]==list01[j]:
		            list01.pop(j)
		            le-=1
		            j-=1
		        j+=1
		    i+=1
		
		print(list01)
           

#3、Tuple

  • 和字元串一樣,tuple一旦建立就不能改變
  • 任意無符号的對象,以逗号隔開,預設為元組
    1. 建立
      s=() #空元組
                 
    2. 通路(分片)
      t2=(10,20,30,40)
       print(t2[0:2])
                 
    3. 修改
      修改元組是非法的
                 
    4. 删除(del)
      del t2
       元組中的元素值是不允許删除的,但我們可以使用del語句來删除整個元組
                 
    5. 元組運算符
      與字元串一樣,元組之間可以使用 + 号和 * 号進行運算。這就意味着他們可以組合和複制,運算後會生成一個新的元組
       Python表達式	           結果	          描述
       len((1, 2, 3))	        3	          計算元素個數
       (1, 2, 3) + (4, 5, 6)  (1, 2, 3, 4, 5, 6)	  連接配接
       ('Hi!',) * 4	       ('Hi!', 'Hi!', 'Hi!', 'Hi!')  複制
       3 in (1, 2, 3)	       True      	元素是否存在
       for x in (1, 2, 3): print (x,)   	1 2 3   	疊代
                 
    6. 類型轉換
      list01 = ('I', 'love', 'python')
       print(type(list01))
      
       # tuple -> str
       list02 =str(list01)
       print(list02)
       print(type(list02))
      
       # tuple -> set
       list03 = set(list01)
       print(list03)
       print(type(list03))
       
       # tuple -> list
       list03 = list(list01)
       print(list03)
       print(type(list03))
                 
    7. 和list比較
    ①、Tuple 與 list 的相同之處
    定義 tuple 與定義 list 的方式相同, 除了整個元素集是用小括号包圍的而不是方括号。
      Tuple 的元素與 list 一樣按定義的次序進行排序。 Tuples 的索引與 list 一樣從 0 開始, 是以一個非空 tuple 的第一個元素總是 t[0]。
      負數索引與 list 一樣從 tuple 的尾部開始計數。
      與 list 一樣分片 (slice) 也可以使用。注意當分割一個 list 時, 會得到一個新的 list ;當分割一個 tuple 時, 會得到一個新的 tuple。
               
    ②、Tuple 不存在的方法
    您不能向 tuple 增加元素。Tuple 沒有 append 或 extend 方法。
      您不能從 tuple 删除元素。Tuple 沒有 remove 或 pop 方法。
      然而, 您可以使用 in 來檢視一個元素是否存在于 tuple 中。
               
    ③、用 Tuple 的好處
    Tuple 比 list 操作速度快。如果您定義了一個值的常量集,并且唯一要用它做的是不斷地周遊它,請使用 tuple 代替 list。
      如果對不需要修改的資料進行 “寫保護”,可以使代碼更安全。
      使用 tuple 而不是 list 如同擁有一個隐含的 assert 語句,說明這一資料是常量。
      如果必須要改變這些值,則需要執行 tuple 到 list 的轉換。
               
    ④、Tuple 與 list 的轉換
    Tuple 可以轉換成 list,反之亦然。内置的 tuple 函數接收一個 list,并傳回一個有着相同元素的 tuple。
      而 list 函數接收一個 tuple 傳回一個 list。從效果上看,tuple 當機一個 list,而 list 解凍一個 tuple。
               

#4、dictionary

  • 典的每個鍵值 key=>value 對用冒号 : 分割,每個鍵值對之間用逗号 , 分割,整個字典包括在花括号 {} 中
  • 鍵一般是唯一的,如果重複最後的一個鍵值對會替換前面的,值不需要唯一。(可用鍵值去重)
  • 和list和tuple一樣,dictionary也可以:
    char={item:ord(item) for item in 'python'}    
      print(char)  
      #{'p': 112, 'y': 121, 't': 116, 'h': 104, 'o': 111, 'n': 110}
               
    1. 通路
      user={
       'name':{'firstName':'zhan','lastName':'liang'},
       'age':20,
       'address':'usa',
       'hobby':['film','sport']
       }
      
       print('user length:',len(user))
      
       print('user first property is :',user['name'])
       
       for key,value in user.items():
           print ('property %s value  %s' % (key,value))
       
       for kk in user.keys():
           print ('property %s' % (kk))
       
       for vv in user.values():
           print ('values %s' % (vv))
                 
      如果想根據key的先後順序周遊字典,則可以:
      for kk in sorted(user.keys()):
           print ('property %s' % (kk))
                 
    2. 針對不存在的鍵,如果通路會出現錯誤。
      nation=user['nation'] #error
       
       #nation=user['nation'] if 'nation' in user else 'china'
                 
      可以用get()避免
      nation=user.get('nation')            
       setdefault('key',default)如果字典中包含有給定鍵,則傳回該鍵對應的值,否則傳回為該鍵設定的值
       print(user.setdefault('ages',30))
                 
    3. 删除元素(pop()、popitem()、clear())
      pop(key) 根據key删除元素
      
       res=user.pop('hobby')
       
       popitem() 删除最後一個元素
       
       clear() 清空字典
                 
    4. 合并字典
      user.update(myuser) 把myuser合并到user中
                 
    5. fromkeys()(把list變成keys)
      seq = ['Google', 'Runoob', 'Taobao']
       dict = dict.fromkeys(seq)
       dict = dict.fromkeys(seq, 10)
       print("新字典為 : %s" % str(dict))
                 
    6. enumerate函數(把list變成value )
      Python内置的enumerate函數可以把一個list變成索引-元素對,這樣就可以在for循環中同時疊代索引和元素本身:
      
       mylist=['A', 'B', 'C']
       print(dict(enumerate(mylist)))
       for i, value in enumerate(mylist):
             print(i,value)
                 
    7. dict,string之間的互相轉化
      s='{"id":"001","name":"python"}'
       # string to dict
       s_dict=eval(s)
       
       print(s_dict['id'])
       
       # dict to string
       
       s_string=str(s_dict)
       
       print(s_string)