天天看點

python3 清單,元組,字典,集合中常見的操作方法彙錦!

python3清單,元組,字典,集合中常見的操作方法彙錦:

【1.以下的字典,清單,集合用于資料存儲處理的這幾個對象,如果沒有傳回值一般都是直接修改原有對象,如果有傳回值那麼原對象值不變。】

【2.有傳回值的一般都需要使用變量接收傳回值,沒有傳回值的一般都不能直接列印并改變原有對象的值。】

【3.索引跟下标:下标指元素的位置,索引指元素名稱,通路像set、dict、list、tuple這樣的類型資料一般使用都是使用下标跟索引來通路!】

【4.以下四大資料類型中沒有列出tuple:因為tuple不能增删改,是以操作函數比較少,但是tuple有索引也有下标,跟清單一樣!】

【5.都支援嵌套!】

一. 清單的操作:

概念:有索引有下标!清單是這四個資料類型中比較靈活的,竟可以通過下标通路也可以通過索引通路元素

1.替換/添加清單元素,也可以說更新

文法:list[obj_index] = obj 解析:list,清單名字;index,索引

舉例:

list1=[1,2,3,4,5]

list1 [4] = 2020

print(list1)

# 結果:

# [1,2,3,4,2020]
           

2.删除清單元素

文法:del list5[index] 解析:del == delete,删除;list,清單名字;index,需要删除的元素索引位置。ps:沒有傳回值

舉例:

list2 = [1,2,3,4,5]

del list2[3]

print(list)

# 結果:

# [1,2,3,5]
           

3.向清單添加元素

文法:list3.inster(index,object) 解析:list3.inster ,調用函數inster();index,元素添加的索引位置;object,需要添加的對象

舉例:

list3=[1,2,3,4,5]

list3.inster(2,2020)

print(list)

# 結果:

# [1,2,2020,3,4,5]
           

4.向清單的結束位置添加元素(當不知道清單元素多少個的時候使用,不然用inster()感覺也夠用了

文法:list4.append(object) 解析:list4.append ,調用函數append(); object ,需要向清單中添加的對象

舉例:

list4=[1,2,3,4,5]

list4.append(2020)

print(list4)

# 結果:

# [1,2,3,4,5,2020]
           

5.移除清單的中的元素。預設最後一個 ( 會傳回被移除的元素) , ps: 适用于dcit,set,list

文法:list5.pop(index) 解析:list5.pop(),調用函數pop() ; index ,可以指定需要移除元素的索引值,如果添加索引,預設為移除最後一個元素,

舉例:

list5=[1,2,3,4,5]

list5.pop()/list5.pop(1)  # / 表示或,注意區分! 

print(list5)

# 結果:

# [1,2,3,4]/[1,3,4,5,]  # / 表示或,注意區分! 
           

6.按順序排列lsit :

負下标排序法:(隻能反轉字元适用于所有可疊代對象)

舉例:

list6=[1,2,3,4,5,5,4,6]

print(list6[::-1])
           

使用内置函數排序:sort(), ps:沒有傳回值

方式1:

list6=[1,2,3,4,5,6]

list1.sort(reverse=True)

print(list6)

# 結果:[6, 5, 4, 3, 2, 1]
           

細節提示:list6=[1,'2','3',4,5,6]

list1.sort(reverse=True)

print(list6)

#  報錯:因為數字是不能跟字元串同時排序的!
           

使用可疊代對象函數排序:ps:可對一切可疊代對象使用!,這兩個方法沒有傳回值

就是使用sorted()跟reverse()下面有具體解析!

7.清空對象:.clear(),ps:可對一切可疊代對象(比如:list,dict這樣的,元組除外元組不能增删改)使用!,該方法沒有傳回值

文法:obj.clear()

舉例:

list7=[1,2,3,4,5]

list7.clear() #不能在清空的時候直接列印!

print(list7)

# 結果:空清單

# [ ]
           

8.統計元素在該對象中出現的次數:count() ,索引值也就是下标從1開始!ps:可對一切對象使用!該方法沒有傳回值

文法:obj.count()

舉例:

list8=[1,2,3,4,4,4,3,5]

list8.count(4)

print(list8)

# 結果:4總共在list8裡出現過3次

# 3
           

9.複制對象:.copy() , ps:可對一切對象使用!該方法沒有傳回值!

文法:obj.copy()

dict1 = {"name":"tyc","age":18,"sex":"boy"}

dict2=dict1.copy()

print(dict2)

# result:{"name":"tyc","age":18,"sex":"boy"}

           

10.最大值,最小值:max(obj) ; min(obj);ps:可對數字跟str使用!不适用于像字典(dict)這樣!

max(obj)文法:max(obj)

舉例:

list8=[1,2,3,4,4,4,3,5]

list9=max(list8)

print(list9)

# 結果:ps:也可以對字元串操作!

# 5
           

min(obj)文法: min(obj)

舉例:

list8=[1,2,3,4,4,4,3,5]

list9=min(list8)

print(list9)

# 結果:ps:也可以對字元串操作!

# 1
           

11.适用list,tuple,set中數字對象的總和:ps:不能操作str,還有字典這樣的!

文法:sum(obj)

舉例:

list8=(1,2,3,4,4,4,3,5)

list9=sum(list8)

print(list9)

# 結果:26
           

12.移除對象中的某一進制素:适用于dict,list,set。ps:預設移除第一個(set除外),該方法沒有傳回值。

文法:object.remove(要移除的元素/元素位置)

舉例:

list1 = ['Google', 'Runoob', 'Taobao', 'Baidu']

list1.remove(list1[1])

print ("清單現在為 : ", list1)

# 結果:清單現在為 : ['Google', 'Taobao', 'Baidu']
           

二. 字典(dict)的操作:

概念:字典也是跟集合一樣無序的,但有索引,不能通過下标通路,隻能通過索引(key)來通路。

1.列印出dict(字典)的所有鍵(key):

文法:obejct.keys(); 字典.keys()

舉例:

dict = {"name":"tyc","age":18,"sex":"boy"}

mun = dict.keys()

print(mun)
           

2.列印出dict(字典)的所有值(value):

文法: object.values() ; 字典.value()

舉例:

dict1 = {"name":"tyc","age":18,"sex":"boy"}

mun1 = dcit1.values()

print(mun1)
           

3.以清單(list)形式傳回字典(dict)的鍵跟值:

文法: object.items(); 解析: items() 字典操作函數(傳回字典的鍵跟值)

舉例:

dict2 = {"name":"tyc","age":18,"sex":"boy"}

mun2 = dict2.items()

print(mun2)

# 結果:dict_items([('name', 'tyc'), ('age', 18), ('sex', 'boy')])
           

還可以使用for循環周遊鍵跟值:

dict2 = {"name":"tyc","age":18,"sex":"boy"}

i=0

for key,value in dict2.items():

i+=1

print(f"這是dict的第{i}鍵:{key},這是dict的第{i}值:{value}")

# 結果:

# 這是dict的第1鍵:name,這是dict的第1值:tyc

# 這是dict的第2鍵: age,這是dict的第2值:18

# 這是dict的第3鍵:sex,這是dict的第3值:boy
           

4.将清單裝換成字典 :

方法1:使用dict.fromkeys()   ps:該方法隻能給所有key指定一個預設value,不能給每個key,指定不同的value

舉例:

list1 = ['name','age','sex']

x ='18'

list2 = dict.fromkeys(list1,x)

print(list2)

# result:  {'name': '18', 'age': '18', 'sex': '18'}
           

方法2:使用 dict(zip())    

舉例:

list3 = ['name','age','sex']

list4 = ['adi','18','boy']

list5 =dict(zip(list3,list4))

print(list5)

# result:  {'name': 'adi', 'age': '18', 'sex': 'boy'}
           

5.指定字典的key跟value:dict.fromkeys(keys,value) ,參數value不能傳入整個清單!

文法:變量 = dict.fromkeys(keys,初始化的值)

舉例:

list1= ['Google', 'Runoob', 'Taobao', 'Baidu']

list2=[1,2,3,4]

dict1= dict.fromkeys(list1,None )

# dict1= dict.fromkeys(list1,list2) # 注意:如果把另一個list做值,value就是整個list2清單!

print ("清單現在為 : ",dict1)

# 結果:清單現在為 : {'Google': None, 'Runoob': None, 'Taobao': None, 'Baidu': None}
           

6.往字典添加鍵和值: ps:預設添加位置是後面!

文法:字典對象.['鍵名']=‘值’

舉例:

dict3 = {"name":"tyc","age":18,"sex":"boy"}

dict3['adi']='千燈'

print('dict3')

# 結果:

# {"name":"tyc","age":18,"sex":"boy","adi" : "千燈" }

           

三. 集合的操作與概念:

概念:在python中集合是無序的,沒有索引沒有下标。不能通過下标或者索引通路其中的元素。

特别之處:1.無法通過索引下标通路特定的元素!2.set中的元素不能重複出現!3.不支援運算符将兩個集合相加!

4.可以使用笨方法學py書中的【if obj in set:】來判斷元素是否存在于集合set中——第四點适用于所有類型。

1.向集合中添加元素:add():隻能一次添加一個;updata([obj_list]):可以一次添加多個,以list形式添加;【ps:這兩個方法沒有傳回值!】

文法:obj.add()

舉例:

friends = {'dog','cat'}

friends.add('duck')

print(friends) # 因為set是無序的是以添加元素位置也是随機的(ps:不能指定位置添加)!

# 結果:{'dog', 'duck', 'cat'}
           

文法:obj.updata([obj_list])

舉例:

friends = {'dog','cat'}

friends.update(['duck','Cattle'])

print(friends) # 因為set是無序的是以添加元素位置也是随機的(ps:不能指定位置添加)!

# 結果:{'cat', 'dog', 'duck', 'Cattle'}
           

2.删除集合中的元素:

使用前面清單中學過的remove()【移除某個元素】,關鍵詞:del obj【删除某個元素】,clear()【清空整個對象】 三個函數即可,ps:三個都沒有傳回值

3.多個集合相加: .obj.union() , 因為前面說過集合不能使用運算符相加,是以隻能使用指定方法相加,如果兩個集合有相同元素,相加之後隻會出現一個!

文法:變量= obj.union(參數1,參數2……) # 有傳回值!

舉例:

friends = {'dog','cat'}

friends1={'duck','cat'}

friends2 = friends.union(friends1) # 這是集合的并集操作

print(friends2) # 因為集合元素不會重複的特點是以之後保留一個cat,日常也可以使用這一特點去重

# 結果:{'cat', 'dog', 'duck'}
           

4.找出多個集合中的交集(也就是相同的元素):.object.intersection(),也就是找出兩個或者多個集合中相同的元素!

文法:變量 = object.intersection(params1,params2……) # 有傳回值

舉例:

friends = {'dog','cat'}

friends1={'duck','cat'}

friends2 = friends.intersection(friends1)

print(friends2)

# 結果:{'cat'}
           

5.找出多個集合中的差集并傳回其中其中一個的內插補點:.object.difference(),就是找出多個set中不相同的元素,任何傳回其中你想要的其中一個set的不同元素。

文法: 變量 = 要傳回的set_obj.difference(params1,params2……)   # 有傳回值

舉例:

friends = {'dog','cat'}

friends1={'duck','cat'}

friends2 = friends1.difference(friends)

print(friends2)

# 結果:{'duck'} # 傳回了friends1中的差集值
           

6. 找出多個集合中的差集并傳回所有集合的差集:.sysmmetric_difference(),找出多個set中不同的元素,然後傳回所有集合的差集值。

文法:變量 = 要傳回的set_obj.sysmmetric_difference(params1,params2……) #有傳回值

舉例:

friends = {'dog','cat'}

friends1={'duck','cat'}

friends2 = friends1.symmetric_difference(friends)

print(friends2)

# 結果:{'duck', 'dog'}  # 傳回了friends1跟friends中的差集值
           

7. 一個集合所有元素是否包含于另外一個集合中:obj.issuperset()

文法:變量 = 包含的set_obj.issuperset(被包含的set_obj) # 有傳回值 -- 傳回True,False

舉例:

friends = {'dog','cat','duck'}

friends1={'duck','cat'}

friends2 = friends.issuperset(friends1)

print(friends2)

# 結果:傳回True
           

8. 判斷兩個集合中是否不存在相同的元素:obj_set1.isdisjoint(set2_obj)

文法:變量 = obj_set1.isdisjoint(set2_obj) #有傳回值:如果不存在傳回False,如果存在傳回True

舉例:

friends = {'dog','cat','duck'}

friends1={'duck','cat'}

friends2 = friends.isdisjoint(friends1)

print(friends2)

# 結果: 傳回False

# 因為friends跟friends1存在相同的元素:“cat”
           

使用sorted()跟reverse()對所有可疊代對象排序:

sorted() 函數對所有可疊代的對象進行排序操作 : 

sorted 文法:

sorted(iterable, key=None, reverse=False)

參數說明:

  • iterable -- 可疊代對象。(可疊代對象表示可以周遊的對象!原本清單有一個排序函數sort(),但是sort()是清單操作函數,隻對清單有效,像其他可以疊代的對象如字典,集合等不能進行排序)
L=[('b',2),('a',1),('c',3),('d',4)]
def adi(x,y):
    if x>y:
        return True
    elif x<y:
        return -1
    else:
        return False
adi = adi(L[1],L[1])
print(adi)
if adi ==-1:
    reverse_test = L
else:
    reverse_test = sorted(L,reverse=adi)
print(reverse_test)

# 結果:
# False
# [('a', 1), ('b', 2), ('c', 3), ('d', 4)]

看你輸入的對比值是什麼!其實沒有什麼兩樣。
           
  • key -- 主要是用來進行比較的元素,隻有一個參數,具體的函數的參數就是取自于可疊代對象中,指定可疊代對象中的一個元素來進行排序。

      【adi:key-- 可以指定哪個值放在首位!】

  • reverse -- 排序規則,reverse = True 降序 , reverse = False 升序(預設)。
a = [5,7,6,3,4,1,2] 

b = sorted(a) # 保留原清單

a [5, 7, 6, 3, 4, 1, 2]

b [1, 2, 3, 4, 5, 6, 7]

L=[('b',2),('a',1),('c',3),('d',4)]

sorted(L, cmp=lambda x,y:cmp(x[1],y[1]))    # 利用cmp函數,沒啥用,傳回0表示false,傳回0表示false,傳回-1表示保留原來的模樣 [('a', 1), ('b', 2), ('c', 3), ('d', 4)]

sorted(L, key=lambda x:x[1])    # 利用key,按第一個(x[1]也就是L[1])開始排序 [('a', 1), ('b', 2), ('c', 3), ('d', 4)]

students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]

sorted(students, key=lambda s: s[2])  # 按年齡排序 [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

sorted(students, key=lambda s: s[2], reverse=True)    # 按降序,按第2個(s[2]也就是students[2])開始排序 [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
           

reverse() 函數用于倒序可疊代對象中元素:(如果是字元串則直接反轉!不進行排序!排序隻對數值排序!)

reverse()方法文法:list.reverse()

舉例1:

list1 = [, 'xyz', 'zara', 'abc', 'xyz']
list1.reverse()
print(list1)
# result : ['xyz', 'abc', 'zara', 'xyz', 123]
           

舉例2:

list1 = [1, 2, 4, 3, 5]

list1.reverse()

print(list1)

# result : [5, 3, 4, 2, 1]