摘要:如果一個對象定義了和兩個方法,它就是一個迭代器,對于迭代器來說,返回的是它自身,則是返回迭代器中的下一個值。
復習索引:
1. dict與list的區別是什么?查找方面 2. dict如何進行數據的存、取、判斷是否存在、返回位置、刪除等操作? 3. 什么是不可變對象?在dict和set中如何應用? 4. dict和set有什么異同? 5. range(),abx()函數如何使用?參數是什么,返回什么? 6. 什么是可迭代對象?
dict
dict全稱dictionary,Python內置字典,在其他語言中也稱為map,使用鍵-值(key-value)存儲,具有極快的查找速度。
與list對比,假設要根據名字查找對應的成績,需要兩個list實現,先在names中找到對應的位置,再從scores中取出對應的成績,list越長,耗時越長。
names = ["jianglin", "jiangduo", "jiangzheng"] scores = [100, 99, 98] a="jianglin" in names #判斷值是否在列表中,返回True或False if a b=scores[names.index("jianglin")] #index()方法返回""在列表中每一次出現的位置,默認搜索整個列表。string類型可以用find()方法查找字符串位置,如果找到則返回第一個匹配的位置。 print(b) else print("查無此人")
用dict實現,直接根據名字查找成績。
dict實現原理類似于查字典,先在字典的索引表(比如部首表)查這個字對應的頁碼,然后直接翻到該頁,找到這個字,查找速度不會隨著字典大小的增加而變慢,給定一個名字,比如"jianglin",dict在內部可以直接計算出"jianglin"對應的存放成績的頁碼,也就是100這個數字的內存地址,直接取出來,所以速度非常快。這種key-value存儲方式(一個key對應一個value),在放進去的時候,必須根據key算出value的存放位置,這樣取出來的時候才能根據key直接拿到value。
而list則是把字典從第一頁往后翻,直到找到我們想要的字,list越大,查找越慢。
dict需要占用大量的內存,list則占用空間小,內存浪費少,dict是用空間來換取時間的一種方法。dict可以用在需要高速查找的很多地方,在Python代碼中幾乎無處不在。
dict的key必須是不可變對象,因為dict根據key來計算value的存儲位置,這種通過key計算位置的算法叫做哈希算法(Hash)。在Python中,字符串和整數都是不可變對象,可以作為key,而list是可變的,不能作為key。
d={"jianglin":100,"jiangduo":99,"jiangzheng":98} #注意{}
d["jianglin"] #注意[]
100
>>> d["shenhangyu"]=97 #可以通過key放入數據,猜想:dict中的數據其實是無序的?dict內部存放的順序和key放入的順序沒有關系 >>> d["shenhangyu"] 97 >>> "jianglin" in d #可以通過in判斷key是否存在 True >>> d.get("yangshu") #通過dict的get()方法,如果key不存在,返回None(不顯示結果)。** >>> d.get("yangshu",-1)#或者可以指定返回的value -1 >>> >>> d.pop("shenhangyu") #刪除key及對應value,可以用pop()方法 97 >>> d {"jianglin": 100, "jiangduo": 99, "jiangzheng": 98} >>>
set
set和dict類似,是一組key的集合,但是不存儲value。由于key不能重復,所以在set中沒有重復的key。
set可以看作數學意義上的無序和無重復元素的集合,因此兩個set可以做數學意義上的交集、并集等操作。
set和dict的唯一區別僅在于沒有存儲對應的value,但set和dict的原理相同,不可以放入可變對象(即list)。
>>> s=set([1,2,3])#創建一個set,需要提供一個list作為輸入集合,set()方法 >>> s #傳入的參數[1,2,3]是一個list,顯示的{1,2,3}只是表示這個set內部有1,2,3這3中元素,顯示的順序不表示set是有序的。 {1, 2, 3} >>> s=set([1,1,2,2,3,3]) >>> s {1, 2, 3} #重復元素在set中自動被過濾 >>> s #通過add(key)方法可以添加元素到key中,可以重復添加,但不會有效果。 {1, 2, 3} >>> s.add(4) >>> s {1, 2, 3, 4} >>> s.add(4) >>> s {1, 2, 3, 4} >>> s.remove(4) #通過remove(key)方法可以刪除元素 >>> s {1, 2, 3} >>> s1=set([1,2,3]) #交集,并集操作 >>> s2=set([2,3,4]) >>> s1&s2 {2, 3} >>> s1|s2 {1, 2, 3, 4}
不可變對象
string是不可變對象,list是可變對象
對于可變對象list,對list進行操作,list內部的內容會變化:
>>> a=["c","b","a"] >>> a.sort() >>> a ["a", "b", "c"]
對于不可變對象,比如string
對于不變對象來說,調用對象自身的任意方法,也不會改變該對象自身的內容,相反,這些對象會創建新的對象并返回,這樣就保證了不可變對象本身永遠是不可變的。
>>> a="abc" >>> a.replace("a","A") #replace方法的確變出了"Abc",但變量a仍是"abc" "Abc" >>> a "abc" >>> a="abc" #a是變量,"abc"是字符串對象,a指向的對象的內容是"abc" >>> b=a.replace("a","A") #方法replace()是作用在字符串對象"abc"上的,方法沒有改變字符串"abc"的內容,而是創建了一個新字符串"Abc"。 >>> b "Abc" >>> a "abc
"
>>> d={(1,2,3):100} #tuple元組(1,2,3)是不變對象,可以作為key構建dict或set >>> d[(1,2,3)] 100 >>> d={(1,[2,3]):200} #(1,[2,3])中包含有list,不可以作為key Traceback (most recent call last): File "", line 1, in TypeError: unhashable type: "list" >>> s3=set([(1,2,3)]) >>> s3 {(1, 2, 3)} >>> s4=set([(1,[2,3])]) Traceback (most recent call last): File " ", line 1, in TypeError: unhashable type: "list"
給你一個列表 L, 對L進行升序排序并輸出排序后的列表。默認升序False輸出
L.sort() print(L)
range()
range(start,stop,step) 計數從start開始,默認從0開始,range(5)等價于range(0,5);計數到stop結束,但不包括stop,range()是[0,1,2,3,4],步長默認為1。
L=[1,2,3,4,5] for i in range(L.len()-1,0,-1) print(i)
abs(X)求絕對值函數,返回一個數的絕對值,這個數可以是整數或浮點數 可以在交互式命令行通過help(abs)查看abs函數的幫助信息
>>> abs(100) 100 >>> abs(-20) 20
可迭代對象
C++中的循環語句,例如for(int i=0; i<100; i++),for本身只起到讓代碼重復執行的作用,沒有什么額外功能,在Python中類似while循環。python中的for循環不一樣,使用for時,我們沒有額外指定結束條件,也不需要一個用來計數的數值,甚至可以通過一個字符串進行循環。這是因為Python中的迭代器(Iterator)以及可迭代對象(Iterable)。如果一個對象定義了_iter_和_next_兩個方法,它就是一個迭代器,對于迭代器來說,_iter_返回的是它自身self,_next_則是返回迭代器中的下一個值。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/43631.html
摘要:的基本數據類型中的變量不需要聲明。在里,只有一種整數類型,表示為長整型,沒有中的。字符串的截取的語法格式如下變量頭下標尾下標索引值以為開始值,為從末尾的開始位置。列表列表是中使用最頻繁的數據類型。注意構造包含或個元素的元組的特殊語法規則。 1、python3的基本數據類型 Python 中的變量不需要聲明。每個變量在使用前都必須賦值,變量賦值以后該變量才會被創建。在 Python 中,...
摘要:本文是通過廖雪峰的網站學習而整理的真的是很好的教程,省得我花錢買書了,然后我沒有去再整理總結語法,而是直接通過寫出代碼段來體現自己的學習,也方便以后的快速復習回顧。 不想再像以前那樣,什么都從頭開始學習語法、總結語法,這樣反而會過分糾結于語法,耽誤了開發,畢竟語言的主要屬性是工具,次要的屬性是語言本身。 所以還是先熟練使用語言去進行開發,等足夠熟悉了,再去研究語言本身(編譯原理……)。...
摘要:布爾值布爾值和布爾代數的表示完全一致,一個布爾值只有兩種值的數據類型可以通過內置的函數查詢,例如還可以用來判斷和的區別在于不會認為子類是一種父類類型。會認為子類是一種父類類型。基本功能是進行成員關系測試和刪除重復元素。 ...
摘要:常量的值近似為。在后傳入一個整數可以保證該域至少有這么多的寬度表示浮點數保留位小數常量的值近似為。 1. 數字 類型 int, float, bool, complex type() 查看變量類型 isinstance(a, int) 查看變量類型 showImg(https://segmentfault.com/img/remote/1460000016789047); 運算符 ...
摘要:作為一名前端開發者,也了解中的很多特性借鑒自比如默認參數解構賦值等,同時本文會對的一些用法與進行類比。函數接收一個函數和一個,這個函數的作用是對每個元素進行判斷,返回或,根據判斷結果自動過濾掉不符合條件的元素,返回由符合條件元素組成的新。 showImg(https://segmentfault.com/img/remote/1460000011857550); 本文首發在 個人博客 ...
閱讀 3267·2021-11-18 10:02
閱讀 3443·2021-10-11 10:58
閱讀 3376·2021-09-24 09:47
閱讀 1120·2021-09-22 15:21
閱讀 3915·2021-09-10 11:10
閱讀 3277·2021-09-03 10:28
閱讀 1749·2019-08-30 15:45
閱讀 2137·2019-08-30 14:22