Python學習總結【連載】(六)
2018.06.20 Juttachen
概述
+ 21 列表補充
+ 22 元組
- 概念
- 元組的查
- 元組的運算符計算
+ 23 字典
- 概念
- 字典的查增刪改
- 字典的方法和運算符計算
+ 24 集合
- 概念
- 集合的查增刪
- 集合的數(shù)學運算
二十一、列表補充
1.關于對象
列表的值[a,b,c],類型是對象
對象類型:列表闯第、字典烤惊、集合朗儒、元組拷沸、通過類創(chuàng)建的對象
變量在存儲對象數(shù)據(jù)的時候褐捻,存的對象保存在內(nèi)存中的地址蹬叭。
如果用存對象的變量給另外一個變量賦值乡摹,賦的是地址
list1 = [1,2,3,4]
list2 = list1
list2[0] = 10
print(list2)
print(list1)
對象賦值的時候就會出現(xiàn)以上情況预明,兩個變量指向同一個對象缩赛,任意變量改變一次對象,
另一個變量也會變撰糠,如果是有序的變量可以通過切片來避免這種問題(切片就是創(chuàng)建新的對象了)
或者用內(nèi)置函數(shù)來拷貝
注意:如果變量里存的對象酥馍,要注意賦值的時候如果不想要兩個變量相互影響,
就不要直接賦值而是拷貝對象產(chǎn)生新的對象然后賦值
list2 = list1[:]
list3 = list1.copy()
list3[1] = 100
list2[0] = 10
print(list1)
print(list2)
print(list3)
二十二阅酪、元組
1.概念
元組(tuple)就是不可變的列表
列表中除了增加旨袒、修改和刪除相關的操作汁针,其他都適用于元組。
什么時候用峦失?就是存到容器中的數(shù)據(jù)不能被修改的時候使用扇丛,
比如:星期幾對應的值
a. 聲明元組
tuple1 = (1,2,3,4,'aa',True)
print(tuple1)
2.元組的查
print(tuple1[0])
print(tuple1[-1])
print(tuple1[:3])
for item in tuple1:
print(item)
for index in range(len(tuple1)):
print(tuple1[index])
3.元組的運算符計算
a.+,*運算
print((1,2,3)+("a","b"))
print((1,"a") * 3)
b. in ,not in
a = 10
print(a in (10,2,9,9))
print(a not in (10,2,9,9))
其他的增刪改是不行的,tuple是不可變的尉辑,個數(shù)和元素都不能變
練習:輸入1-7的數(shù)字帆精,對應輸入是星期幾。如:輸入1隧魄,就輸出‘星期一’卓练,輸入7就輸出‘星期日’
num1 = int(input('請輸入1-7中任意數(shù)字:'))
tuple2 = ('星期一','星期二','星期三','星期四','星期五','星期六','星期日')
print(tuple2[num1-1])
# 注意:不要亂加條件,或者運行過程购啄。
二十三襟企、字典
字典是一個容器類的數(shù)據(jù)類型,以鍵值對(key:value)的形式來存儲數(shù)據(jù)狮含。
特點:字典是可變的(說明可以增刪改查)顽悼,但是是無序的(不能使用下標改變元素)。
鍵值對:以鍵:值的形式存在几迄。我們真正要存的是值蔚龙。
值可以是任何類型的數(shù)據(jù);鍵理論上只能是不可變的數(shù)據(jù)類型的數(shù)據(jù)映胁,在實際開發(fā)中一般用字符串
1.定義/聲明一個字典(dict)
dict1 = {'name':'羅浩','age':18} # 聲明了一個字典對象木羹,存了兩個鍵值對
dict2 = {'score':100,10:'aaa',(1,3):[10,23]}
print(dict2)
# dict3 = {[10,12]:'abc'}
# print(dict3)
# 鍵不能是可變的,報錯:TypeError: unhashable type:'list'
聲明一個字典解孙,存小明的姓名坑填、年齡、成績弛姜、顏值
dict4 = {'name':'小明','age':18,'score':100,'face':90}
print(dict4)
2.字典的查增刪改
a.查
1) 通過key去獲取值
格式:字典名[key值]
print(dict4['age'])
# print(dict4['abc']) 字典中沒有這個鍵脐瑰,報錯: KeyError:'abc'
2) 通過get方法獲取值
格式:字典名.get(key)
什么時候用?獲取字典中廷臼,不確定key對應的鍵值對是否存在的時候苍在,就使用get方法
print(dict4.get('name'))
print(dict4.get('abe')) #結果是None
# None:python中的一個特殊值,表示沒有中剩,類似C中的NULL
練習:獲取字典中的‘grade’對應的值忌穿,如果grade不存在就打印不存在,否則出值
str1 = dict4.get('grade')
if str1 == None:
print('不存在')
else:
print(str1)
3)遍歷字典
注意:字典沒有像列表的切片结啼,要取多個只能用遍歷字典
直接遍歷字典拿到的是字典所有的key值掠剑,要拿值的話就通過key來做
dict4 = {'a':1,'b':2,'c':3}
for key in dict4:
print(key,dict4[key])
print(dict4.items())
for (key,value) in dict4.items():
print(key,value)
# 同時拿到key和value,但不推薦,因為在獲取鍵值對前郊愧,需要有轉換操作朴译,計算機會消耗太多的cpu井佑。
b.修改
通過Key去拿到對應的元素,然后重新賦值
dict4 = {'a':1,'b':2,'c':3}
dict4['a'] = 10
print(dict4)
-
練習:將上面的字典中所有的值變?yōu)樵瓉淼娜?
dict4 = {'a':1,'b':2,'c':3} for key in dict4: dict4[key] *= 3 print(dict4)
c.增加
通過key取值眠寿,然后賦值(如果這個key不存在躬翁,就是添加鍵值對。如果key存在盯拱,就是修改這個Key對應的值)
由此可知:字典里面key一定是唯一的盒发,而且不可變的。如果一個key寫出了兩個值狡逢,那么只有最后那個的值有意義宁舰,其他的都被銷毀。
練習:增加鍵值對:'d':4
dict3 = {'a':1,'b':2.5,'c':False,'d':[1,2,3]}
dict3['d'] = 4
print(dict3)
dict5 = {}
dict5['name'] = '張山'
dict5['color'] = 'red'
dict5['color'] = 'green'
print(dict5)
d.刪除
(刪除的是鍵值對奢浑,一個被銷蛮艰,另一個也會消失)
a.del語句
格式:del 字典[key]
dict1 = {'a':1,'b':2.5,'c':False,'d':[1,2,3]}
del dict['b'] # 刪除‘b’對應的鍵值對
print(dict1)
b.pop()方法
格式:字典.pop(key)
dict1.pop('a')
pirnt(dict1,result)
dict1 = {'a':1,'b':2.5,'c':False,'d':[1,2,3]}
dict1.popitem() #popitem方法:隨機刪除(取出)一個元素
dict1 = {'a':1,'str':'string','b':2.5,'c':False,'d':[1,2,3]}
練習:將字典中,值為字符串的全部刪除
for key in dict1.copy():
num = dict1[key]
if isinstance(dict2[key],str):
dict1.pop(key)
print(dict1)
3.字典的方法和運算符計算
a.keys和values方法
keys:獲取字典中所有的key
values:獲取字典中所有的值
dict1 = {'a':1,'b':2,'c':3}
print(dict.keys())
print(dict1.values())
b.update方法
字典.update(字典2):用字典2中的元素去更新字典1中的元素(如果字典2中的鍵值對字典沒有雀彼,就直接添加壤蚜。有的話就修改)
dict1.update({'a':1,'b':2.5,'c':False,'d':[1,2,3]})
print(dict1)
c.in 和 not in
判斷字典中是否有指1定的key
print('a' in dict1)
print(100 in dict1)
二十四、集合
1.概述
集合也是一種容器類型
特點:無序的
元素的值是唯一的(不能重復)
數(shù)據(jù)存取是通過{}去存儲元素徊哑,多個元素之間用逗號隔開袜刷。
聲明一個集合
set1 = {1,2,3,4,1,10} # 結果是:{1,2,3,4,10}
print(set1)
# 將其他數(shù)據(jù)轉換為集合的話,自帶去重功能
# 將字符串轉換成集合
set2 = set('abcdefjssbb')
print(set2)
常用的是:各種數(shù)據(jù)的相互轉化
將列表轉換成集合(當然元組也可以)
set3 = set([1,2,3,4,5,6,6,7])
print(set3)
將字典轉換成集合(是將字典的key取出來作為集合的元素)
set4 = set({'a':1,'b':2,'c':3})
print(set4)
2.集合的查增刪
a.查
在集合中不能單獨獲取某一個元素或部分元素实柠,只能通過遍歷的方式去獲取每一個元素水泉。
練習:將字符串str1 = 'abdaadhjkjjhks'去重
str1 = 'abdaadhjkjjhks'
set1 = set(str1)
str2 = ''
# 遍歷集合
for x in set1:
str2 += x
str1 = str2
print(str1)
# 注意:順序是不能控制的
b.增加
1)通過update增加:集合1.update(集合2):將集合2中的元素添加到集合1中善涨。
set1 = set('123456')
set2 = set('abcd1')
set1.update(set2)
print(set1)
2)add:集合.add(元素):將指定的元素添加到指定的集合中窒盐。
set1.add('aaa')
print(set1)
c.刪除
集合.remove(元素):將指定的元素從集合中刪除,如果不存在則報錯钢拧。
set1.remove('1')
print(set1)
3.集合的數(shù)學運算
python中的集合除了擁有作為容器相關的操作以外蟹漓,還擁有數(shù)學中集合的相關操作
a.判斷包含關系:>=,<=
set1 = set('abczef')
set2 = set('abcg')
集合1>=集合2:判斷集合1中是否包含集合2,結果是布爾值
print(set1 >= set2)
集合1 <= 集合2:判斷集合2中是否包含集合1
print(set1 <= set2)
b.|,&,-,^
set1 = set('123456')
set2 = set('456789')
| :求并集,在兩個集合中所有的元素
print(set1 | set2)
& :求交集,兩個集合都有的元素
print(set1 & set2)
-:在集合1中但是不在集合2中的所有元素
print(set1 - set2)
^:獲取集合1和2中源内,除了公共部分以外的所有的元素
print(set1 ^ set2)
c.copy
將set1中所有的元素取出來葡粒,創(chuàng)建一個新的集合。
print(set1.copy())
什么時候用集合膜钓?
功能涉及到數(shù)學集合相關的操作的時候嗽交,就要想到用集合。