python学习 day6 (3月7日)
題目:
l1 = [11, 22, 33, 44, 55] #將此列表索引為奇數的對應元素全部刪除 # 錯誤示例 for l in range(len(l1)):print(l)if l % 2==1:#l1.pop(l) # 等同余下 一個是括號 一個是中括號del l1[l] print(l1)# l1 = [11, 22, 33, 44, 55] # del l1[1::2] # print(l1) dic = {'k1': 'v1', 'k2': 'v2', 'k3': 'v3', 'name': 'alex'} lis = [] # 循環一個字典時,不能改變 字典的大小,否則會報錯for key in dic.keys(): # if 'k' in key:# del dic[key]print(key)if 'k' in key:# dic.pop(key)lis.append(key)# for li in lis:# del dic[li] # 在后面 刪除 for li in lis:del dic[li] print(dic)
同一類型
小數據池: 理解?
id == is ?兩者之間的id是否相同 ?(is 判斷內存地址是否一樣)(==判斷值是否一樣)
同一內存地址
? ? ? ? ? ?? 獲取該對象的內存地址
代碼塊:
一個文件;
? 交互式命令:一行代碼
同一個代碼塊下:字符串的緩存機制,駐留機制:
背景:同一代碼塊下,遇到初始化對象命令,會實現檢查字典是否有此對應關系.......
針對的數據類型:int(float) , 大量的str , bool ?,(), None ?
None--------空列表空元組 空字符 統一指向這個內存地址
優點:
節省內存
提高執行性能
小數據池:
不同代碼塊?
在內存中,開辟兩個空間.
一個空間:-5~256
一個空間:一定規則的字符串
<20 ?個位 ? >-1
針對的數據類型:int str , bool ?,(), None ?
優點:
節省內存
提高執行性能
# 超出范圍了
?數據類型的補充:
int str bool ? lis tuple dict ? ? ? ? ? ? ? ?set
? ?(1)-------->int ?(1,)------------->tuple
int str bool ?包起來 ?
other ------------> ? ?bool ?
0 '' ?() ?[] ?{} ? ------> ?False ?
list <----> ?tuple ?包起來
list、tuple ------> ?str ? ?sploit
str ---------------> list、tuple ? ?' ?',join(str)
用三種方式創建一個字典:
dic ={'name' : 'liuer'}
(2)-----> {1:2, 'name':alex}
(3)-----> {1:alex , 2:alex , 3:alex}
數據類型的補充
(1,)
fromkeys([1,2,3] , [])
循環一個列表 循環一個字典時 ?,不能改變他們的大小,否則會報錯
明天 : 編碼進階 文件操作 ?深淺copy?
?
str(dict) ?--------> {}
inpre () ?'{}' ? ? ?#程序員用
print() ? # 美化了
回顧:字典特點:
1.key是唯一的.
2.key必須是可以哈希的(不可變數據類型:字符串,元組,數值)
3.key是無序的.
3.6中dict的元素有序是解釋器的特點,不是python源碼的特點.
xxx.py
Cpython -> 有序
Jpython? -> 無序
集合:set
實際上就是一種特殊的字典.
所有value都是None的字典,就是集合.
對比字典和集合的特點:
| 字典 | 集合 |
| Key唯一 | 元素唯一 |
| Key可以哈希 | 元素可以哈希 |
| Key無序 | 元素無序 |
如何獲取集合?
1.手動創建集合.
1.創建空集合
d = {}
創建空集合,只有一種方式:調用set函數.
S = set()
?
?
2.創建帶元素集合
S = {1,2,3}
從可迭代對象中(字符串,列表,元組,字典)創建集合.
s = set(‘abc’)
S = set([1,2,3])
S = set((1,2,3))
S = set({‘name’:’Andy’,’age’:10})
?
?
2.通過方法調用
-> str
-> list
-> set
?
集合的操作:
查看集合可用的方法:
[x for x in dir(set) if not x.startswith(‘_’)]
['add', 'clear', 'copy', 'difference', 'difference_update', 'discard', 'intersection', 'intersection_update',
'isdisjoint', 'issubset', 'issuperset', 'pop', 'remove', 'symmetric_difference', 'symmetric_difference_update', 'union', 'update']
增:
?? add:如果元素存在,沒有做任何動作.
刪:
Pop() ??? :依次從集合中彈出一個元素,如果集合為空,報錯
Discard(ele) :從集合中刪除指定的元素,如果不存在,什么都不執行
Remove(ele)? :從集合中刪除指定的元素,如果不存在,報錯
Clear()????? :清空
集合的四大常用操作:
并集:union
交集:intersection
差集:difference
對稱差:symmetric_difference
改(更新):
Update :用二者的并集更新當前集合
difference_update:用二者的差集更新當前集合
intersection_update:用二者的交集更新當前集合
symmetric_difference_update:用二者的對稱差集更新當前集合
?
?
判斷功能:
Isdisjoint:判斷兩個集合是否沒有交集
Issubset:判斷當前集合是否是后者的子集
Issuperset:判斷后者是否是當前集合的子集
查
集合基本沒有單獨取其中元素的需求.
?
集合的使用場景:
1.判斷一個元素是否在指定的范圍之內.
2.方便數學上的集合操作.
并,交,差,對稱差
有簡化寫法:
并:|
交:&
差:-
對稱差:^
?
3.對序列數據類型中的重復元素進行去重
?
如果想遍歷集合中的元素.
通常用for循環.
?
frozenset:凍結的集合
最大的特點:不可變.
?
['copy', 'difference', 'intersection', 'isdisjoint', 'issubset', 'issuperset', 'symmetric_difference', 'union']
少了添加,更新的方法.
?
s = frozenset()
?
s = frozenset('abcabc')
s = frozenset([1,2,3])
s = frozenset((1,2,3))
s = frozenset({'name':'Andy','age':10})
?
集合的四大方法:并,交,差,對稱差.
set,frozenset是否可以混用?
可以!
總結:
如果兩種數據類型混用,方法的主調者的類型決定了最終結果的類型.
?
?
?
frozenset應用場景:
凡是使用到不可改變的數據的場景,都是可以使用frozenset的.
set集合的元素:必須是可以哈希的,set本身不是可以哈希.
但是frozenset是不可變的數據.(可以哈希的),它是可以放到集合中.
set和frozenset可以互相轉換.
?淺 copy ?只 copy 第一層元素 ?: ?
l1 = [1,2,3,[1,2]]
l2 = l1.copy()
改變列表里的列表(第二層)都變 ?改變列表里的數字 ?不變?
深 copy?
l1 = [1,2,3,[1,2]]
l2 = l1.deepcopy()
改變列表里的列表 不變?
不可變得 變化 改值 開辟新的內存空間 ?
轉載于:https://www.cnblogs.com/Doner/p/10488861.html
總結
以上是生活随笔為你收集整理的python学习 day6 (3月7日)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Unity插件Gaia使用介绍
- 下一篇: 有时候eclipse 导入maven项目