1.元組
基本介紹
- 元組的基本形式tuple
- 元組是一個(gè)不可變序列(一般我們希望數(shù)據(jù)不改變時(shí),我們使用元組,其他情況下基本使用列表)
- 使用()創(chuàng)建元組
- 元組不是空元組,至少要有一個(gè)逗號(,)當(dāng)元組不是空元組時(shí)括號可以省略
- 元組解包指將元組當(dāng)中每一個(gè)元素都賦值給一個(gè)變量
a = tuple()
print(type(a))
輸出結(jié)果:
<class 'tuple'>
******************************
tuple_m = (1,2,3,4,5)
tuple_m[3]=10
報(bào)錯(cuò):(不可變)
TypeError: 'tuple' object does not support item assignment
******************************
a = 10
b = 10,
print(type(a),type(b))
輸出結(jié)果:
<class 'int'> <class 'tuple'>
******************************
A = (10,20,30,40)
a,b,c,d = A
print('a=',a)
print('b=',b)
print('c=',c)
print('d=',d)
輸出結(jié)果:
a= 10
b= 20
c= 30
d= 40
******************************
A = (10,20,30,40)
a,b = A
print('a=',a)
print('b=',b)
輸出結(jié)果:
報(bào)錯(cuò):too many values to unpack (expected 2)
注意:如果變量的數(shù)量要和元組中的元素一一對應(yīng),如果不對應(yīng),可以加個(gè) * ,變量將會(huì)獲取元素當(dāng)中剩余的元素
A = (10,20,30,40)
a,b,*c = A
print('a=',a)
print('b=',b)
print('c=',c)
輸出結(jié)果:
a= 10
b= 20
c= [30, 40]
2.字典
2.1字典基本介紹
- 字典屬于一種新的數(shù)據(jù)結(jié)構(gòu)稱為映射(mapping)
- 字典的作用和列表類似,都是用來儲(chǔ)存對象的容器
- 列表存儲(chǔ)數(shù)據(jù)的性能好,但是查詢數(shù)據(jù)的性能差,字典正好與之相反
- 字典中的每一個(gè)元素都有唯一的名字,通過這個(gè)唯一的名字可以找到指定的元素
- 這個(gè)唯一的名字我們稱之為key,通過key可以快速查詢value也可稱之為值
- 字典我們也可稱之為鍵值對(key-value)結(jié)構(gòu)
- 每個(gè)字典都可以有多個(gè)鍵值對,而且每個(gè)鍵值對我們稱之為一項(xiàng)(item)
- 創(chuàng)建一個(gè)有數(shù)據(jù)的字典 語法{key:value}
- 字典的值可以是任意對象 字典的鍵可以是任意的不可變對象(int str bool tuple…)
- 字典的建是不能重復(fù)的,如果出現(xiàn)重復(fù)后面的會(huì)替換前面的
d = {'name':'葫蘆娃','age':'7','sex':'男','name':'金剛葫蘆娃'}print(d['name'],d['age'],d['sex'])
print(d)
輸出結(jié)果:
金剛葫蘆娃 7 男
{'name': '金剛葫蘆娃', 'age': '7', 'sex': '男'}
*****************************
a = dict([('name','葫蘆娃'),('age',7)])
print(a,type(a))
輸出結(jié)果:
{'name': '葫蘆娃', 'age': 7} <class 'dict'>
2.2字典的使用
- dict()函數(shù)來創(chuàng)建字典
注意:也可以將一個(gè)包含有雙值子序列的序列轉(zhuǎn)化為字典.
雙值序列:序列當(dāng)中有2個(gè)值,例如:[4,5]
子序列:如果序列當(dāng)中的元素也是序列,我們就稱這個(gè)元素為子序列.例如:[(1,2,3),(4,5)]
a = dict(name='葫蘆娃',age=7,sex='男')
b = dict([('name','葫蘆娃'),('age',7)])
print(a,type(a))
print(b,type(b))
輸出結(jié)果:
{'name': '葫蘆娃', 'age': 7, 'sex': '男'} <class 'dict'>
{'name': '葫蘆娃', 'age': 7} <class 'dict'>
d = {'name':'葫蘆娃','age':'7','sex':'男'}
len() 字典中鍵值對的個(gè)數(shù)
print(len(d))
in 檢查字典中是否包含有指定的鍵
not in 檢查字典中是否不包含有指定的鍵
print('葫蘆娃' in d)
print('葫蘆娃' not in d)
- get(key[,default])根據(jù)鍵來獲取字典的值。第二個(gè)參數(shù)可以制定一個(gè)默認(rèn)值,當(dāng)獲取不到的時(shí)候會(huì)返回默認(rèn)值
d = {'name':'葫蘆娃','age':'7','sex':'男'}
print(d.get('name'))
print(d.get('name','啥也不是'))
print(d.get('nameA','啥也不是'))
print(d.get('nameA'))
輸出結(jié)果:
葫蘆娃
葫蘆娃
啥也不是
None
- 字典的修改和添加
d = {'name':'葫蘆娃','age':'7','sex':'男'}
d['name']= '豬豬俠' #修改字典中的value
print(d)
d['phont']= 110 #如果字典中沒有key,我們向字典中添加key-value
print(d)
#setdefault(key,default) 可以向字典中添加key-value
#如果字典中的key值已經(jīng)存在,不會(huì)對字典有任何操作
#如果字典中的key值不存在,則向這個(gè)字典中添加這個(gè)key并設(shè)置value
d.setdefault('name','喜洋洋')
print(d)
d.setdefault('nameA','喜洋洋')
print(d)
輸出結(jié)果:
{'name': '豬豬俠', 'age': '7', 'sex': '男'}
{'name': '豬豬俠', 'age': '7', 'sex': '男', 'phont': 110}
{'name': '豬豬俠', 'age': '7', 'sex': '男', 'phont': 110}
{'name': '豬豬俠', 'age': '7', 'sex': '男', 'phont': 110, 'nameA': '喜洋洋'}
- update()將其他字典的key-value添加到當(dāng)前字典當(dāng)中,如果有重復(fù)的key,后邊的會(huì)覆蓋前邊的
a = {'a':1,'b':2,'c':3}
a1 = {'d':4,'e':5,'f':6,'a':7}
a.update(a1)
print(a)
輸出結(jié)果:
{'a': 7, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6}
- del刪除字典中的key-value
a = {'a':1,'b':2,'c':3}
del a['a']
print(a)
輸出結(jié)果:
{'b': 2, 'c': 3}
- popitem()刪除字典最后的一個(gè)key-value 一般都會(huì)刪除最后一個(gè),這個(gè)方法是有返回值的。刪除之后它會(huì)將刪除的key-value作為返回值返回,返回的是一個(gè)元組,元組中有2個(gè)元素,第一個(gè)元素是刪掉的可key,第二個(gè)元素是刪掉的value
a = {'a':1,'b':2,'c':3,'d':4,'e':5,'f':6}
r= a.popitem()
print(a)
print(r)
輸出結(jié)果:
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
('f', 6)
- pop(key[,default])根據(jù)key刪除字典中的value。第二個(gè)參數(shù)可以制定一個(gè)默認(rèn)值,當(dāng)獲取不到值的滯后就會(huì)返回默認(rèn)值,
a = {'a':1,'b':2,'c':3,'d':4,'e':5,'f':6}
r = a.pop('b')
print(a)
print(r)
w= a.pop('w','這個(gè)沒有')
print(w)
n= a.pop('w') #報(bào)錯(cuò)KeyError: 'w'
print(n)
輸出結(jié)果:
{'a': 1, 'c': 3, 'd': 4, 'e': 5, 'f': 6}
2
這個(gè)沒有
- clean()
a = {'a':1,'b':2,'c':3,'d':4,'e':5,'f':6}
a.clean()
print(a)
輸出結(jié)果:
{}
2.3copy() (淺復(fù)制)
- copy()方法對字典進(jìn)行潛復(fù)制
注意:潛復(fù)制只會(huì)復(fù)制字典本身,如果字典中還有個(gè)字典是不會(huì)進(jìn)行復(fù)制的
a1 = {'d':{'name':'黑貓警長'},'e':5,'f':6,'a':7}
a = a1.copy()
a['d']['name'] = '喜洋洋'
print('a1=',a1,id(a1))
print('a=',a,id(a))
輸出結(jié)果:
a1= {'d': {'name': '喜洋洋'}, 'e': 5, 'f': 6, 'a': 7} 140327461091200
a= {'d': {'name': '喜洋洋'}, 'e': 5, 'f': 6, 'a': 7} 140327461091456
***********************************************
a1 = {'d':'ad','e':5,'f':6,'a':7}
a= a1.copy()
a['d']= 'we'
print('a1=',a1,id(a1))
print('a=',a,id(a))
輸出結(jié)果:
a1= {'d': 'ad', 'e': 5, 'f': 6, 'a': 7} 140403938948928
a= {'d': 'we', 'e': 5, 'f': 6, 'a': 7} 140403938948992
3字典的遍歷
我們主要通過3種方式對字典進(jìn)行遍歷
- key() 該方法返回字典所有的key
- values() 該方法返回一個(gè)序列 序列中保存有字典的值
- items() 該方法會(huì)返回字典中所有的項(xiàng) 它返回一個(gè)序列,序列中包含雙值子序列 雙值分別是 字典中的key和value
d = {'name':'葫蘆娃','age':'7','sex':'男'}
for k in d.keys():
print(k)
輸出結(jié)果:
name
age
gender
*****************************************
for v in d.values():
print(v)
輸出結(jié)果:
葫蘆娃
7
男
*****************************************
for k,v in d.items():
print(k)
print(v)
輸出結(jié)果:
name
葫蘆娃
age
7
gender
男
4.集合
4.1集合簡介
- 集合表現(xiàn)形式 set , 集合和列表非常相似
- 不同點(diǎn) (集合和列表)
1.集合只能存儲(chǔ)不可變對象
2. 集合中存儲(chǔ)的對象是無序的(不是按元素插入順序保存的)
3.集合不能出現(xiàn)重復(fù)元素
b = {[1,2,3],[4,5,6]}
print(b)
輸出結(jié)果: #集合只能存儲(chǔ)不可變對象
報(bào)錯(cuò):
TypeError: unhashable type: 'list'
********************************************
s = {1,2,10,3,4}
print(a ,type(a))
輸出結(jié)果:#集合中存儲(chǔ)的對象是無序的
{1, 2, 3, 4, 10} <class 'set'>
********************************************
a = {1,2,10,3,4,1}
print(a ,type(a))
輸出結(jié)果:#集合不能出現(xiàn)重復(fù)元素
{1, 2, 3, 4, 10} <class 'set'>
- 使用 {} 來創(chuàng)建
a = {1,2,3}
print(type(a))
輸出結(jié)果:
<class 'set'>
- 可以通過set() 來將序列和字典轉(zhuǎn)換成集合
s =set ([1,2,3,4])
print(s,type(s))
輸出結(jié)果:
{1, 2, 3, 4} <class 'set'>
- len()使用len()來獲取集合中元素的數(shù)量
s = {1,2,3,5,4}
print(len(s))
輸出結(jié)果:
5
- add()向集合中添加元素
s = {1,2,3,5,4}
s.add(6)
print(s)
輸出結(jié)果:
{1, 2, 3, 4, 5, 6}
- update() 將一個(gè)集合中的元素添加到另外一個(gè)集合當(dāng)中
s = {1,2,3,5,4}
s1 = {8,9,7}
s.update(s1)
print(s)
輸出結(jié)果:
{1, 2, 3, 4, 5, 7, 8, 9}
- pop() 隨機(jī)刪除集合中的一個(gè)元素(一般是刪除最后一個(gè)元素)
s = {1,2,3,5,4}
s.pop()
print(s)
輸出結(jié)果:
{2, 3, 4, 5}
- remove() 刪除集合中指定的元素
s = {1,2,3,5,4}
s.remove(2)
print(s)
輸出結(jié)果:
{1, 3, 4, 5}
- clear() 清空集合
s = {1,2,3,5,4}
s.clear()
print(s)
輸出結(jié)果:
set()
4.2集合的運(yùn)算
- & 交集運(yùn)算
- | 并集運(yùn)算
- - 差集運(yùn)算
- ^亦或集
- <= 檢查一個(gè)集合是否是另外一個(gè)集合的子集
- < 檢查一個(gè)集合是否是另外一個(gè)集合的真子集
- >= 檢查一個(gè)集合是否是另外一個(gè)集合的超集
- > 檢查一個(gè)集合是否是另外一個(gè)集合的真超集
s = {1,2,3,4,5}
s2 = {3,4,5,6,7}
& 交集運(yùn)算
r = s & s2
| 并集運(yùn)算
r = s | s2
- 差集運(yùn)算
r = s - s2
r = s2 - s
^ 亦或集
r = s2 ^ s
print('s='s,'s2='s2,'r='r)
輸出結(jié)果:
s={1, 2, 3, 4, 5}
s2={3, 4, 5, 6, 7}
r={3, 4, 5} #交集運(yùn)算
r={1, 2, 3, 4, 5, 6, 7}#并集運(yùn)算
r={1, 2} r={6, 7} #差集運(yùn)算
r={1, 2, 6, 7} #亦或集
****************************************
a = {1,2,3,}
b = {1,2,3,4,5}
r = a <= b
r1 = a < b
print(r,r1)
輸出結(jié)果:
True #檢查集合a是否是集合b的子集
True #檢查集合a是否是另外集合b的真子集