@[TOC]
元組(tuple)
Python的元組與列表類似粤铭,不同之處在于元組的元素不能修改挖胃。
元組使用小括號,列表使用方括號。
元組的創(chuàng)建
元組創(chuàng)建很簡單酱鸭,只需要在括號中添加元素吗垮,并使用逗號隔開即可
tup1 = ('physics', 'chemistry', 1997, 2000)
tup2 = (1, 2, 3, 4, 5 )
tup3 = ("a", "b", "c", "d")
tup4 = 1,2,3,4
元組中只包含一個元素時,需要在元素后面添加逗號
tup1 = 50,
tup2 = (50,)
元組索引
元組與字符串類似凹髓,下標索引從0開始烁登,可以進行截取,組合等蔚舀。
訪問元組
元組可以使用下標索引來訪問元組中的值饵沧,如下實例:
tup1 = ('physics', 'chemistry', 1997, 2000)
tup2 = (1, 2, 3, 4, 5, 6, 7 )
print ("tup1[0]: ", tup1[0])
print ("tup2[1:5]: ", tup2[1:5])
以上實例輸出結(jié)果:
tup1[0]: physics
tup2[1:5]: (2, 3, 4, 5)
元組解包
元組解包指把元組每一個元素都賦值給一個變量
tup1 = (1,2,3,4)
a,b,c,d = tup1
print('a=',a)
print('b=',b)
print('c=',c)
print('d=',d)
結(jié)果:
a= 1
b= 2
c= 3
d= 4
必須讓變量數(shù)量對應(yīng)元素數(shù)量,否則用*來讓一個變量擁對應(yīng)多個元素赌躺,形式為列表形式
tup1 = (1,2,3,4)
a,b,*c = tup1
print('a=',a)
print('b=',b)
print('c=',c)
tup1 = (1,2,3,4)
a,*b,c = tup1
print('a=',a)
print('b=',b)
print('c=',c)
tup1 = (1,2,3,4)
*a,b,c = tup1
print('a=',a)
print('b=',b)
print('c=',c)
以上實例輸出結(jié)果:
a= 1
b= 2
c= [3, 4]
a= 1
b= [2, 3]
c= 4
a= [1, 2]
b= 3
c= 4
字典
字典的數(shù)據(jù)結(jié)構(gòu)為映射(mapping)
字典的作用和列表一樣狼牺,用來存儲數(shù)據(jù),但是列表的查詢性能很差礼患,而字典相反
字典外層是?括號{}是钥,?等號賦值
列表中的元素是?成?體的,?字典的元素是由鍵值對構(gòu)成的缅叠,?英?冒號連接悄泥。有多少個鍵值對就有多少個元素。
如'?郭': 90痪署,其中我們把'?郭'叫鍵(key)码泞,90叫值(value)
每個鍵值對我們可以稱為一項(item)
鍵值對之間?逗號隔開
所存儲的兩種數(shù)據(jù)若存在??對應(yīng)的情況兄旬,?字典儲存會更加?便狼犯。唯?的鍵和對應(yīng)的值 形成的整體,我們就叫做【鍵值對】领铐。鍵具備唯?性悯森,?值可以重復(fù)。 字典中數(shù)據(jù)是隨機排列的(無序的绪撵,所以無法像列表或者元組一樣通過索引獲得元素)
字典的創(chuàng)建
- 直接用變量加花括號創(chuàng)建
如下:
dct = {'name':'小王','age':18,'job':'programmer',
'home add':'天津'}
print(dct)
輸出結(jié)果:
{'name': '小王', 'age': 18, 'job': 'programmer', 'home add': '天津'}
- 通過dict函數(shù)創(chuàng)建
如下:
dct = dict(name='小王',age=18,job='程序員',hone_add='天津')
print(dct)
dct1 = dict([('name','age'),('小王',18)]) #雙值子序列也能轉(zhuǎn)換為字典
print(dct1)
輸出結(jié)果:
{'name': '小王', 'age': 18, 'job': '程序員', 'hone_add': '天津'}
{'name': 'age', '小王': 18}
獲取字典元素
字典是無序的瓢姻,所以通過索引無法獲取字典中的值,但是可以通過字典中鍵值對的鍵來獲取
如下:
dct = dict(name='小王',age=18,job='程序員',hone_add='天津')
print(dct['name'])
以上實例輸出結(jié)果:
小王
還可以通過get方法獲取音诈,get(key,default)
get方法是通過鍵來獲取字典當中的值幻碱,若是沒有,則返回None细溅,或者通過設(shè)置第二個參數(shù)(默認值)來返回默認值內(nèi)容
如下:
dct = dict(name='小王',age=18,job='程序員',hone_add='天津')
print(dct.get('name'))
print(dct.get('小張'))
print(dct.get('小張'),'抱歉褥傍,字典中沒有這個鍵')
以上實例輸出結(jié)果:
小王
None
None 抱歉,字典中沒有這個鍵
修改字典
直接修改或添加
字典中的鍵不能重復(fù)
可以直接用獲取key改變value
如果沒有這個鍵喇聊,則可以增加字典中的鍵值對
如下:
dct = dict(name='小王',age=18,job='程序員',hone_add='天津')
print('修改前',dct)
dct['name'] = '小張'
dct['sex'] = '男'
print('修改后',dct)
結(jié)果:
修改前 {'name': '小王', 'age': 18, 'job': '程序員', 'hone_add': '天津'}
修改后 {'name': '小張', 'age': 18, 'job': '程序員', 'hone_add': '天津', 'sex': '男'}
通過setdefault(key,default)方法添加key:value
如果這個key已經(jīng)存在恍风,則返回key值,對字典沒有任何影響
如果key不存在,向字典添加這個key并設(shè)置value朋贬,返回value
如下:
dct = dict(name='小王',age=18,job='程序員',hone_add='天津')
print('修改前',dct)
dct.setdefault('name','小張')
dct.setdefault('sex','男')
print('修改后',dct)
結(jié)果:
修改前 {'name': '小王', 'age': 18, 'job': '程序員', 'hone_add': '天津'}
修改后 {'name': '小王', 'age': 18, 'job': '程序員', 'hone_add': '天津', 'sex': '男'}
update方法添加字典
update方法將其他字典添加到當前字典中
如下:
dct = dict(name='小王',age=18,job='程序員',hone_add='天津')
dct1 = dict(sex='男')
print('修改前',dct)
dct.update(dct1)
print('修改后',dct)
結(jié)果:
修改前 {'name': '小王', 'age': 18, 'job': '程序員', 'hone_add': '天津'}
修改后 {'name': '小王', 'age': 18, 'job': '程序員', 'hone_add': '天津', 'sex': '男'}
刪除
del
刪除字典中的key:value
dct = dict(name='小王',age=18,job='程序員',hone_add='天津')
print('修改前',dct)
del dct['name']
print('修改后',dct)
修改前 {'name': '小王', 'age': 18, 'job': '程序員', 'hone_add': '天津'}
修改后 {'age': 18, 'job': '程序員', 'hone_add': '天津'}
popitem
隨機刪除字典中的一個鍵值對凯楔,一般刪除最后一個
刪除后會將刪除的值作為返回值返回(元組形式)
dct = dict(name='小王',age=18,job='程序員',hone_add='天津')
print('修改前',dct)
dct.popitem()
print('修改后',dct)
修改前 {'name': '小王', 'age': 18, 'job': '程序員', 'hone_add': '天津'}
修改后 {'name': '小王', 'age': 18, 'job': '程序員'}
pop
通過key來刪除key:value,刪除的值作為返回值返回
dct = dict(name='小王',age=18,job='程序員',hone_add='天津')
print('修改前',dct)
fan = dct.pop('name')
print('返回值:',fan)
print('修改后',dct)
修改前 {'name': '小王', 'age': 18, 'job': '程序員', 'hone_add': '天津'}
返回值: 小王
修改后 {'age': 18, 'job': '程序員', 'hone_add': '天津'}
clear()
清空字典
dct = dict(name='小王',age=18,job='程序員',hone_add='天津')
print('修改前',dct)
dct.clear()
print('修改后',dct)
修改前 {'name': '小王', 'age': 18, 'job': '程序員', 'hone_add': '天津'}
修改后 {}
遍歷字典
keys()
keys()返回的是一個序列,保存的是字典中所有的鍵
dct = {'name':'小王','age':'18','job':'程序員'}
for i in dct.keys():
print(i)
name
age
job
values()
values()返回的是一個序列锦募,保存的是字典中所有的值
dct = {'name':'小王','age':'18','job':'程序員'}
for i in dct.values():
print(i)
小王
18
程序員
items()
items()返回的是一個序列摆屯,返回字典的所有項,包括雙值子序列
dct = {'name':'小王','age':'18','job':'程序員'}
for i,j in dct.items():
print(i,':',j)
name : 小王
age : 18
job : 程序員
淺復(fù)制
淺復(fù)制復(fù)制以后與原對象之間是獨立的糠亩,修改一個并不會影響另一個
普通復(fù)制:
dct = dict(name='小王',age=18,job='程序員',hone_add='天津')
#普通復(fù)制
dct1 = dct
dct['name'] = '小張'
print('dct:',dct,id(dct))
print('dct1:',dct1,id(dct1))
dct: {'name': '小張', 'age': 18, 'job': '程序員', 'hone_add': '天津'} 1402806635136
dct1: {'name': '小張', 'age': 18, 'job': '程序員', 'hone_add': '天津'} 1402806635136
普通復(fù)制兩個id相同鸥拧,一方修改另一個也會改變
淺復(fù)制:
dct = dict(name='小王',age=18,job='程序員',hone_add='天津')
#淺復(fù)制
dct1 = dct.copy()
dct['name'] = '小張'
print('dct:',dct,id(dct))
print('dct1:',dct1,id(dct1))
dct: {'name': '小張', 'age': 18, 'job': '程序員', 'hone_add': '天津'} 2238110323136
dct1: {'name': '小王', 'age': 18, 'job': '程序員', 'hone_add': '天津'} 2237827343488
淺復(fù)制雙方id不同,一方修改另一方不會改變
但是削解,如果嵌套字典富弦,則會只復(fù)制第一層字典內(nèi)容
如:
dct = {'n':{'name':'小王','age':'18'},'job':'程序員'}
#淺復(fù)制
dct1 = dct.copy()
dct['n']['name'] = '小張'
print('dct:',dct,id(dct))
print('dct1:',dct1,id(dct1))
字典內(nèi)的嵌套字典會隨一方改變而改變
dct: {'n': {'name': '小張', 'age': '18'}, 'job': '程序員'} 1191683056832
dct1: {'n': {'name': '小張', 'age': '18'}, 'job': '程序員'} 1191683057152
通用方法
- len 獲取字典中鍵值對個數(shù)
- in 判斷字典中是否有這個鍵
- in not 判斷字典中是否沒有這個鍵
如以下:
dct = dict(name='小王',age=18,job='程序員',hone_add='天津')
print('字典中鍵值對的個數(shù)是',len(dct))
print('home_add' in dct)
print('home_add' not in dct)
以上實例輸出結(jié)果
字典中鍵值對的個數(shù)是 4
False
True
集合(set)
- 集合中的元素是無序的
- 集合中不能出現(xiàn)重復(fù)的元素
- 集合只能存儲不可變序列
集合的創(chuàng)建
集合和字典相同都用{},但是集合沒有鍵氛驮,只有元素值
集合中存貯列表會報錯腕柜,因為只能存貯不可變序列,而列表是可變的
直接創(chuàng)建:
se = {1,2,3,4}
print(se,type(se))
{1, 2, 3, 4} <class 'set'>
通過set()創(chuàng)建:
se = set([1,2,3,4]) #這里函數(shù)中用列表矫废,因為要存儲序列
print(se,type(se))
s = set({'name':'小王','age':18}) #用set函數(shù)將字典轉(zhuǎn)換為集合僅會保留字典的鍵
print(s)
{1, 2, 3, 4} <class 'set'>
{'name', 'age'}