tuple
什么是元祖(tuple)
Python提供的容器型數(shù)據(jù)類型拣展,不可變,并且有序
不可變 - 不支持增刪改佩微,只支持查
有序 - 可以通過下標獲取元素(每個元素對應一個確定的下標)字面量和元素
(元素1九串,元素2,...)
可以是任意數(shù)據(jù)類型冬阳,并且類型可以不一樣,同樣的元素可以有多個
point = (20,20)
print(point,type(point))
注意:
1.空的元祖
tuple2 = ()
print(type(tuple2))
2.只有一個元素的元祖-- 在元素后面加一個逗號5骋肝陪!
tuple2 = (100,)
print(tuple2,type(tuple2))
3.直接將多個元素用逗號隔開,不加小括號刑顺,表示的也是一個元祖
tuple3 = 12,25,25,25,36,4
print(tuple3,type(tuple3))
- 元祖獲取元素和列表是一樣的
tuple4 = ('南充','廣安','達州','廣元')
print(tuple4[1],tuple4[2])
獲取部分
print(tuple4[0:3])
print(tuple4[::])
直接遍歷
for city in tuple4:
print(city)
通過下標遍歷
for index in range(len(tuple4)):
print(tuple4[index])
index = 0
while index < len(tuple4):
print(tuple4[index])
index+=1
補充:特殊的獲取方式
- 變量1氯窍,變量2... = 元祖 -- >用前面的變量依次獲取元祖中元素的值 要求前面變量的個數(shù)和元祖的個數(shù)一致
point = (100,200)
x,y = point # x, y = 100,200
print(y,x)
- 變量1,變量2 = 元祖 -- 通過帶 的變量獲取元祖中剩余的部分
注意:這個結構中帶的變量只有一個蹲堂,不帶的變量可以有多個
name,*scores= ('小明',25,52,32,52)
print(name,*scores)
*scores,num = ('小明',25,52,32,52)
print(*scores,num)
*info,num1,num2 = ('小明',25,52,32,52)
print(*info,num1,num2)
補充:*的用法
nums = (1,2,3,4,56,7)
nums2 = [1,2,3,4,5]
print(*nums,*nums2)
4.相關運算(和列表一樣)*狼讨,+,in/not in len(),max(),min(),sum(),tuple()
tuple1 = (10,25,2)
tuple2 = (22,'dfsf',52)
print(tuple1 + tuple2,tuple1*2)
print('abc' in tuple1)
print('abc' not in tuple1)
5.排序
sorted(序列) - 對序列中的元素排序贯城,產(chǎn)生一個新的序列
注意:列表.sort() -- 修改原列表中的順序 sorted(列表) - 產(chǎn)生一個新的列表
tuple1 = (1,25,2,)
print(sorted(tuple1))
new_strs = sorted('sfadsfdsfadfadsf')
print(new_strs)
num = ''.join(new_strs)
print(num)
joio的使用
字符串.join(序列) - 將序列中的元素取出熊楼,用指定的字符串鏈接在一起。要求序列中的元素是字符串
new_strs = ''.join(['s','sd','sd'])
print(new_strs)
dict
- 什么是字典(dict)
Python提供的容器型數(shù)據(jù)類型能犯,可變并且無序
可變 - 支持元素的增刪改
無序 - 不支持下標的操作
2.字面量和元素
用大括號括起來鲫骗,里面有多個鍵值對,每個鍵值對用逗號隔開踩晶,鍵值對就事字典的元素
鍵值對: 鍵/dey:值/value(鍵值對)- 鍵值對必須成對出現(xiàn)执泰;脫離字典是沒有意義的。
{ key1:value1,key2:value2,key3:value3...}
鍵 - 必須是不可變的渡蜻,而且是唯一的术吝。實際一般將字符串作為鍵
值 - 可以是任何數(shù)據(jù)類型
注意:字典存儲數(shù)據(jù) 實質(zhì)是通過值來存的,key是值對應的標簽和獲取值的方式茸苇。
dict1 = {} # 空字典
dict1 = {'a':12,'b':25,(1,2):'afd'} # key是唯一的
print(dict1)
3.什么時候使用字典:多個沒有相同意義的數(shù)據(jù)(需要區(qū)分)排苍,就使用字典。例如:保存一個人的不同信息学密;
什么時候使用列表:存儲的多個數(shù)據(jù)是相同的數(shù)據(jù)淘衙,(相同意義的數(shù)據(jù)),不需要對不同的數(shù)據(jù)進行區(qū)分腻暮;例如:保存一個班的學生的成績
person = {'name':'xiaoming','age':18,'sex':'girl','height':165,'weight':56,'score':90}
練習 彤守; 聲明一個變量 保存一個班的學生信息(四個學生)毯侦,每個學生需要保存姓名、電話和年齡
students = [{'name':'小明','tel':564346,'age':30},{'name':'張三','tel':56421516,'age':15},
{'name':'李四','tel':564343545,'age':15},
{'name':'王五','tel':152156,'age':30}]
字典元素的增刪改查
- 查(獲取值)
注意:字典中的鍵值對單獨拎出來你沒有任何意義
a. 字典[key] - 獲取字典中key對應的值
注意: 當key不存在的時候具垫,會報出keyError
car = {'color':'黃色','type':'跑車','price':500000}
print(car['color'])
b. 字典.get(key) - 獲取字典中key對應的值
注 意: 當key不存在的時候侈离,不會報錯,并會取到一個默認值:none
字典.get(key,值1) - 當key不存在的時候筝蚕,不會報錯 卦碾,并且取到對應的值1
print(car.get('type'))
print(car.get('speed'))
print(car.get('color','紅色'))
print(car.get('speed',0))
c. 遍歷字典
注意:直接通過for- in 遍歷字典取到的是key
dict1 = {'a':100,'b':300,'c':23}
遍歷字典取到的是key
for key in dict1:
# key
print(key,end='')
# value
print(dict1[key])
遍歷字典的values(),獲取所有值
for value in dict1.values():
print(value)
遍歷字典的item(),直接獲取key和value(不建議使用)
for key,vlue in dict1.items():
print(key,value)
- 增,改
a.
字典[key] = 值 - 當key不存在就是添加鍵值對,當key存時起宽,就是修改key對應的值
movie = {'name':'喜洋洋','type':'卡通','time':120}
添加
movie['score'] = 9.9
print(movie)
修改
movie['name'] = '喜洋洋與灰太狼'
print(movie)
- 刪(刪除鍵值對)
a. del 字典[key] - 刪除字典中指定的key對應的鍵值對
b. 字典.pop(key) - 取出字典中key對應的值
name = movie.pop('name')
print(movie,name)
練習:用一個字典保存一個學生的信息:{'name':'張三'蔗坯,'age':18,'score':85}
輸入修改的信息,例如:請輸入修改信息的:name - > 修改名字 abc -> 沒有該信息
dict1= {'name':'張三','age':18,'score':85}
num = input('請輸入修改信息:')
for key in dict1:
if num == 'name':
name1 = input('請輸入修改姓名:')
dict1['name'] = name1
print(dict1)
break
elif num == 'age':
age2 = int(input('請輸入年齡:'))
dict1['age'] = age2
print(dict1)
break
elif num == 'score':
score2 = int(input('請輸入成績:'))
dict1['score'] = score2
print(dict1)
break
else:
print(input('沒有該信息'))
相關運算
1.比較運算
== 燎含,!=
注意:判斷兩個字典是否相等,只看鍵值對是否一樣腿短,不管鍵值對的順序
字典不支持 > < 符號
print({'a':1,'b':2} == {'b':2,'a':1}) # 相等 字典是無序的 為True
- in /not in
key in 字典 判斷字典中指定的key是否存在
key not in 字典 判斷字典中指定的key是否不存在
dict1 = {'a':1,'b':2}
print('a' in dict1)
print(1 in dict1) # False
- len(),max(),min()
dict(數(shù)據(jù)) - 要求是序列屏箍,并且序列的元素都是有兩個元素的子序列
獲取字典中鍵值對的個數(shù)
print(len(dict1))
print(max(dict1)) # 判斷所有key的最大值
print(min(dict1)) # 字典中key的最小值
將列表作轉(zhuǎn)為字典
print(dict([(1,2),[52,'sdd'],('sdf','s')]))
字典轉(zhuǎn)別的序列 都是將字典中的key取出,作為序列的元素
dict1 = {'a':1,'b':2}
print(list(dict1))
相關方法:
字典.clear() - 清空字典
注意:清空容器推薦使用clear 操作橘忱,而不是重新賦一個空的容器
dict1 = {'a':1,'b':2}
直接賦值赴魁,修改其中一個的元素,會影響另外一個
dict2 = dict1
dict1.clear()
print(dict1)
- 字典.copy() - 復制字典中的元素钝诚,產(chǎn)生一個新的字典
dict1 = {'a':1,'b':2}
拷貝賦值颖御,會產(chǎn)生新的地址,賦值后相互不影響
dict2 = dict1.copy()
dict2.clear()
print(dict1)
print(id(dict1),id(dict2))
- 字典.fromkeys(seq,value) -- 以序列中所有的元素作為key凝颇,指定的值作為value創(chuàng)建一個新的字典
new_dict = dict.fromkeys('adv',100)
print(new_dict)
字典.keys() -將字典所有的key取出產(chǎn)生一個新的序列
字典.values() - 將字典所有的values取出產(chǎn)生一個新的序列
字典.items() - 將字典所有的key 和 values取出產(chǎn)生一元祖取出產(chǎn)生一個新的序列
- 字典.setdefault(key,value = none)
字典.setdefault(key) - 當key存在的時候潘拱,添加鍵值對key:None
字典.setdefault(key,value) - 當key不存在的時候,添加鍵值對key:value
注意:這個操作當key存在的時候拧略,不會修改
dict1 = {'name':'xiaoming','color':'black','height':158}
dict1.setdefault('name2')
print(dict1)
字典1.update(字典2) - 使用字典2中的鍵值對去更新字典1芦岂,
如果字典2中的key在字典1中本來就存在就是修改,不存在添加
dict1 = {'name':'xiaoming','color':'black','height':158}
dict1.update({'height':120,'age':78})
print(dict1)
集合
- 什么是集合(set)
可變的
無序的垫蛆;元素是唯一的并且不可變
2.字面量
{元素1禽最,元素2...}
set1 = {1,0,2,2,2,52} #
print(set1) # {0, 1, 2, 52} 元素是唯一的 可以去重
空集合
set2 = set()
print(set2)
- 增刪改查
set1 = {1,0,2,52}
- 查
集合不能單獨的獲取單個元素,只能一個一個的遍歷
for itme in set1:
print(itme)
增
a.集合.add(元素) - 在集合中添加指定元素
b.集合.update(序列) - 將序列中的元素添加到集合中
set1 = {1,0,2,52}
set1.add('ssf')
print(set1)
set1.update({'aa':10,'sd':22})
print(set1)
刪
集合.remove(元素) --- 刪除集合中指定的元素
set1 = {1,0,2,52}
set1.remove(2)
print(set1)
4.數(shù)學集合運算
交集(&):獲取兩個集合公共的元素產(chǎn)生一個新的集合
并集(|):將兩個集合中的元素合并在一起產(chǎn)生一個新的集合
差集(-):集合1-集合2:去掉集合1中包含集合2的部分袱饭,剩下的產(chǎn)生一個新的集合
補集(^):將兩個集合合并在一起起去掉公共部分川无,剩下的部分產(chǎn)生一個新的集合
子集的判斷:集合1>集合2, - > 判斷集合1是否包含集合2 集合1<集合2 -- > 判斷集合1是否包含集合2