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