Day8-Python-元組字典集合-2019/1/3

元組

1.什么是元組(tuple)

python提供的容器型數(shù)據(jù)類型,不可變并且有序。(元組就是不可變的列表)
不可變 - 不支持增刪改,只支持查
有序 - 每個元素對應(yīng)一個確定的下標(biāo)

2.字面量和元素

(元素1,元素2,元素3···)
其中的元素可以是任何類型的數(shù)據(jù),并且類型可以不一樣,同樣的元素可以有多個

注意:如果小括號里只有一個元素,那么就是這個元素本身。只有在元素后添加一個逗號,才代表這是一個元組。

空的元組:tuple1 = ()

只有一個元素的元組:tuple2 = (1,)

直接將多個元素用逗號隔開,不加小括號,表示的也是一個元組:tuple3 = 1, 2, 3

3.元組獲取元素和列表是一樣的

獲取單個元素:tuple[index]

獲取部分,切片,生成的是新的元組:tuple[index:index:step]

遍歷

補(bǔ)充:

特殊的獲取方式:
1.變量1,變量2··· = 元組 --- 用左邊的變量依次獲取元組中元素的值。(要求左邊的變量個數(shù)要和元組中元素的個數(shù)相同)
2.變量1,*變量2 = 元組 --- 通過帶*號的變量獲取元組中剩余的部分;
注意:這個結(jié)構(gòu)中帶*號的變量只能有一個,不帶*號的變量可以有多個
3.*號取出來的是一個列表

name, *scores = ('小明', 100, 89, 67, 99)
print(name,scores)

name, num, *scores = ('小明', 100, 89, 67, 99)
print(name, num, scores)

*info, num1, num2 = (('小明', 100, 89, 67, 99))
print(info, num1, num2)

info1, *nums, num1 = ('小明', 100, 89, 67, 99)
print(info1, nums, num1)

補(bǔ)充:

1.獲取元組和列表中的數(shù)據(jù)

nums = (1, 2, 3)
nums2 = [11, 22, 33]
print('===:',*nums, *nums2)
print(1, 2, 3)
print(nums,nums2)

input:
===: 1 2 3 11 22 33 # 取出來的是int
1 2 3
(1, 2, 3) [11, 22, 33]

4.相關(guān)運(yùn)算(和列表一樣)

+, *
in / not in
len(), max(), min(), sum(), tuple() 元素內(nèi)容類型必須要一樣

5.排序

sorted(序列) - 對序列中的元素排序,產(chǎn)生一個新的列表(不管是什么序列,排完后最后都是列表)
原序列不變
注意:列表.sort() -- 修改原列表中元素的順序; sorted(列表) -- 產(chǎn)生一個新的列表

6.join的使用

字符串.join(序列) - 將序列中的元素取出,用指定的字符串連2在一起
要求序列中的元素必須是字符串。

字典

1.什么是字典(dict)

python提供的容器類型數(shù)據(jù),可變且無序
可變 - 支持元素的增刪改
無序 - 不支持下標(biāo)操作

2.字面量和元素

大括號括起來,里面多個鍵值對,每個鍵值對用逗號隔開。鍵值對就是字典的元素。
{key1:value1, key2:value2, key3:value3...}
鍵值對 - 鍵/key:值/value(鍵值對);鍵值對必須成對出現(xiàn),而且脫離字典單獨(dú)出現(xiàn)沒有意義
鍵/key - 必須是不可變的,而且是唯一的。實際一般將字符串作為鍵
值/value - 可以是任意類型的數(shù)據(jù)

注意:字典存儲數(shù)據(jù),實質(zhì)是通過值來存儲的。key是值對應(yīng)的標(biāo)簽和獲取值的方式

空字典:dict1 = {}
dict1 = {'a':100, 10:200, (1,2):'abc','a':111}
'a':100 會被 'a':111 覆蓋

3.什么時候使用字典

什么時候使用字典:多個不同意義的數(shù)據(jù)(需要區(qū)分),就使用字典。例如:保存一個人的信息,一輛車的不同信息
什么時候使用列表:存儲多個相同意義的數(shù)據(jù)(不需要區(qū)分),就是用列表。例如:保存一個班的學(xué)生信息,保存所有的價格

4.字典元素的增刪改查

1.查(獲取值value)
注意:字典中的鍵值對單獨(dú)取出來沒有任何意義

a.
字典[key] - 獲取字典中key對應(yīng)值
注意:當(dāng)key不存在的時候,會報KeyError

b.
字典.get(key)- 獲取字典中key對應(yīng)值;當(dāng)key不存在的時候不會報錯,并且取到一個默認(rèn)值None
字典.get(key,值1) - 獲取字典中key對應(yīng)值;當(dāng)key不存在的時候不會報錯,并且取到指定的值1

c.
遍歷字典
注意:直接通過for-in遍歷字典取到的是key
遍歷字典的values(), 獲取所有的值(不建議使用,當(dāng)處理的數(shù)據(jù)多時,內(nèi)存消耗大)
遍歷字典的items(), 直接獲取key和value(不建議使用,當(dāng)處理的數(shù)據(jù)多時,內(nèi)存消耗大)

dict1 = {'a':100, 'b':200, 'c':300}
# 遍歷字典取到的是key(推薦使用)
for key in dict1:
    # key
    print(key,end=' ')
    # value
    print(dict1[key])

# 遍歷字典的values(), 獲取所有的值(不建議使用,當(dāng)處理的數(shù)據(jù)多時,內(nèi)存消耗大)
for value in dict1.values():
    print(value)

# 遍歷字典的items(), 直接獲取key和value(不建議使用,當(dāng)處理的數(shù)據(jù)多時,內(nèi)存消耗大)
for k,value in dict1.items():
    print(k,value)

2.增、改
字典[key] = 值 - 當(dāng)key不存在時,就是添加鍵值對;當(dāng)key存在時,就是修改key對應(yīng)的值

3.刪(刪除鍵值對)
a.
del 字典[key] - 刪除字典中指定的key對應(yīng)的鍵值對
b.
字典.pop(key) - 取出字典中指定的key對應(yīng)的鍵值對

5.字典的適用方法

1.比較運(yùn)算
==,!=
注意:
判斷兩個字典是否相等,只看鍵值對數(shù)量,長相是否一樣,不管鍵值對的順序
字典不支持比較大小

  1. in / not in
    key in 字典
    key not in 字典

3.len(),max(),min()
dict(數(shù)據(jù)) - 數(shù)據(jù)要求是序列,并且序列中的元素都是只有兩個元素的子序列,一般這個序列是字典。

print(dict([(1,2), ('a', 'b'),[10, 'abc']]))

input:{1: 2, 'a': 'b', 10: 'abc'}

補(bǔ)充:關(guān)于字典轉(zhuǎn)列表/元組/集合

dict2 = {'name':'xiaohua', 'color':'black', 'height':170}
print(list(dict2)) 

input:['name', 'color', 'height']

字典轉(zhuǎn)列表/元組/集合都是將字典中的key取出來作為列表/元組/集合的元素

4.相關(guān)方法
1.字典.clear() - 清空字典
注意:清空容器推薦使用clear操作,而不是重新賦一個空的容器。這樣節(jié)省電腦資源
只有容器本身不存在的時候,才使用賦一個空容器
2.字典.copy() - 復(fù)制字典中的元素,產(chǎn)生一個新的字典
原理和列表切片一樣,如果直接賦值,修改其中一個字典的元素,會影響另外一個字典中的元素。因為地址相同
補(bǔ)充:拷貝賦值,會產(chǎn)生新的地址,賦值后互不影響

  1. dict.fromkeys(序列, 值) -- 以序列中所有的元素作為key,指定的值作為value創(chuàng)建一個新的字典
new_dict = dict.fromkeys('abc', (10, 20, 30))
print(new_dict)

new_dict = dict.fromkeys(['name', 'age', 'tel'], 0)
print(new_dict)

input:{'a': (10, 20, 30), 'b': (10, 20, 30), 'c': (10, 20, 30)}
{'name': 0, 'age': 0, 'tel': 0}

4
字典.keys() - 將字典所有的key取出產(chǎn)生一個新的序列
字典.values() - 將字典所有的value取出產(chǎn)生一個新的序列
字典.items() - 將字典所有的key和value做為一個元祖取出產(chǎn)生一個新的序列
沒啥用

dict2 = {'name': 'xiaohua', 'color': 'black', 'height': 170}
print(dict2.keys(), dict2.values(), dict2.items())

input:
dict_keys(['name', 'color', 'height']) 
dict_values(['xiaohua', 'black', 170])
dict_items([('name', 'xiaohua'), ('color', 'black'), ('height', 170)])

5.字典.setdefault(key, value=None)
字典.setdefault(key) - 當(dāng)key不存在的時候,添加鍵值對key:None
字典.setdefault(key, value) - 當(dāng)key不存在的時候,添加鍵值對key:value
注意:這個操作當(dāng)key存在的時候,不會修改

dict2 = {'name': 'xiaohua', 'color': 'black', 'height': 170}

dict2.setdefault('name2', '小胡')
dict2.setdefault('sex')
print(dict2)

input:{'name': 'xiaohua', 'color': 'black', 'height': 170, 'name2': '小胡', 'sex': None}

6.字典1.update(字典2/只有2個元素的序列)
使用字典2中的鍵值對去更新字典1;如果字典2中的key,字典1中本身存在就是修改,不存在就添加

dict2 = {'name': 'xiaohua', 'color': 'black', 'height': 170}
dict2.update({'height': 180, 'age': 18})
print(dict2)

dict2.update([('a', 100), ('age', 30)])
print(dict2)

input:{'name': 'xiaohua', 'color': 'black', 'height': 180, 'age': 18}
{'name': 'xiaohua', 'color': 'black', 'height': 180, 'age': 30, 'a': 100}

集合

1.什么是集合(set)

可變的,無序的;元素是唯一并且不可變

2.字面量

{元素1,元素2,元素3···}

補(bǔ)充:
1.空集合:set1 = set()
2.集合自帶去重功能

3.增刪改查

1.查
集合不能單獨(dú)地獲取單個元素,只能一個一個的遍歷,因為無序。
2.增
a.集合.add(元素)- 在集合里添加指定的元素
b.集合.update(序列) - 將序列中的元素添加到集合中
# 如果集合內(nèi)的數(shù)字為連續(xù)數(shù)字,那么集合會自動排序這幾個數(shù)字,且添加時數(shù)字之間不會插入添加的元素

set1 = {6,7,4,5,8}
set1.add('abc')
print(set1)

set1.update('abc')
print(set1)

set1.update({'aa':10, 'bb':20})  # 如果序列是字典,只把key添加進(jìn)去
print(set1)

3,刪
集合.remove(元素) --- 刪除集合中指定的元素

4.數(shù)學(xué)集合運(yùn)算

交集(&):獲取兩個集合公共的元素,產(chǎn)生一個新的集合
并集(|):將兩個集合中的元素合并在一起,產(chǎn)生一個新的集合
差集(-):集合1 - 集合2 :求集合1中去掉集合2中元素還剩下的元素
補(bǔ)集(^):將兩個集合合并在一起,去掉公共的部分,剩下的部分產(chǎn)生新的集合,并集-交集
子集的判斷
集合1>集合2 --- 判斷集合1中是否包含集合2,集合2元素全部在集合1中才是包含
集合1<集合2 --- 判斷集合2中是否包含集合1.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容