成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

[學(xué)習(xí)筆記]Python基本語(yǔ)法之dict,set

AZmake / 2096人閱讀

摘要:如果一個(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

相關(guān)文章

  • python3學(xué)習(xí)筆記(2)----python的數(shù)據(jù)類型

    摘要:的基本數(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 中,...

    陸斌 評(píng)論0 收藏0
  • 記錄我的Python學(xué)習(xí)筆記

    摘要:本文是通過廖雪峰的網(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ǔ)言本身(編譯原理……)。...

    lijy91 評(píng)論0 收藏0
  • Python零基礎(chǔ)到入門】Python基礎(chǔ)語(yǔ)法篇——基本數(shù)據(jù)類型【文末送書】

    摘要:布爾值布爾值和布爾代數(shù)的表示完全一致,一個(gè)布爾值只有兩種值的數(shù)據(jù)類型可以通過內(nèi)置的函數(shù)查詢,例如還可以用來判斷和的區(qū)別在于不會(huì)認(rèn)為子類是一種父類類型。會(huì)認(rèn)為子類是一種父類類型?;竟δ苁沁M(jìn)行成員關(guān)系測(cè)試和刪除重復(fù)元素。 ...

    Winer 評(píng)論0 收藏0
  • Python 3 學(xué)習(xí)筆記——數(shù)據(jù)類型

    摘要:常量的值近似為。在后傳入一個(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)算符 ...

    Riddler 評(píng)論0 收藏0
  • 走近 Python (類比 JS)

    摘要:作為一名前端開發(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è)人博客 ...

    shadajin 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<