久久精品国产亚洲高清|精品日韩中文乱码在线|亚洲va中文字幕无码久|伊人久久综合狼伊人久久|亚洲不卡av不卡一区二区|精品久久久久久久蜜臀AV|国产精品19久久久久久不卡|国产男女猛烈视频在线观看麻豆

    1. <style id="76ofp"></style>

      <style id="76ofp"></style>
      <rt id="76ofp"></rt>
      <form id="76ofp"><optgroup id="76ofp"></optgroup></form>
      1. 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機構(gòu)

        手機站
        千鋒教育

        千鋒學(xué)習(xí)站 | 隨時隨地免費學(xué)

        千鋒教育

        掃一掃進(jìn)入千鋒手機站

        領(lǐng)取全套視頻
        千鋒教育

        關(guān)注千鋒學(xué)習(xí)站小程序
        隨時隨地免費學(xué)習(xí)課程

        當(dāng)前位置:首頁  >  技術(shù)干貨  > Python中可以hash的數(shù)據(jù)類型

        Python中可以hash的數(shù)據(jù)類型

        來源:千鋒教育
        發(fā)布人:xqq
        時間: 2023-11-07 11:49:33 1699328973

        在Python中,僅僅只有不可變數(shù)據(jù)類型可以被hash,然而每個自定義的對象在Python中都可以被hash,默認(rèn)的他們的hash值是由他們的id派生的。也就意味著,同一個類的兩個不同實例,默認(rèn)的是得到不同的hash值

        >>>classCar():

        ...velocity=0

        ...direction=0

        ...damage=0

        ...

        >>>first_car=Car()

        >>>second_car=Car()

        >>>hash(first_car)

        274643597

        >>>hash(second_car)

        274643604

        哈希表

        現(xiàn)在你知道了什么是哈希函數(shù),現(xiàn)在可以檢測哈希表,哈希表是一個數(shù)據(jù)結(jié)構(gòu)可以儲存一堆鍵值對。

        在哈希表中,鍵值對的所有建必須是可以哈希的,因為存儲的對是通過使用其鍵的散列索引的。哈希表十分有用,Hashtablesareveryusefulbecausetheaveragenumberofinstructionsthatarenecessarytolookupanelementofthetableisindependentofthenumberofelementsstoredinthetableitself.哈希表非常有用,因為查找表中某個元素所需的平均指令數(shù)量與表中存儲的元素數(shù)量無關(guān),這就表明了不管你的表增長到成百上千次,查找特定元素的速度不會受到影響。

        哈希表通常是通過創(chuàng)建可變數(shù)量的存儲桶來實現(xiàn)的,這些存儲桶將包含您的數(shù)據(jù),并通過哈希它們的鍵對這些數(shù)據(jù)進(jìn)行索引。鍵的散列值將確定用于特定數(shù)據(jù)段的正確存儲桶。

        importpprint

        classHashtable:

        def__init__(self,elements):

        self.bucket_size=len(elements)

        self.buckets=[[]foriinrange(self.bucket_size)]

        self._assign_buckets(elements)

        def_assign_buckets(self,elements):

        forkey,valueinelements:

        hashed_value=hash(key)

        index=hashed_value%self.bucket_size

        self.buckets[index].append((key,value))

        defget_value(self,input_key):

        hashed_value=hash(input_key)

        index=hashed_value%self.bucket_size

        bucket=self.buckets[index]

        forkey,valueinbucket:

        ifkey==input_key:

        return(value)

        returnNone

        def__str__(self):

        returnpprint.pformat(self.buckets)#herepformatisusedtoreturnaprintablerepresentationoftheobject

        if__name__=="__main__":

        capitals=[

        ('France','Paris'),

        ('UnitedStates','WashingtonD.C.'),

        ('Italy','Rome'),

        ('Canada','Ottawa')

        ]

        hashtable=Hashtable(capitals)

        print(hashtable)

        print(f"ThecapitalofItalyis{hashtable.get_value('Italy')}")

        Moreover,themoreyouincreasethenumberofbucketsyouwillhandle,themorespaceyouwillwaste.Totestthisyoucansimplychangethebucketsizeofyourpreviousexampleusinganumberofbucketsthatistwotimesthelengthoftheinputlist:

        此外,處理的桶數(shù)增加越多,浪費的空間就越多。要測試這一點,只需使用輸入列表長度的兩倍的桶數(shù)來更改上一個示例的桶大小

        兩個散列值發(fā)生碰撞,將會存儲到同一個桶中,因為沖突不可避免,實現(xiàn)一個哈希表就得有一個解決沖突的方法。

        通常在哈希表解決沖突的常用策略是:

        openaddressing開放尋址法

        separatechaining鏈地址法

        連地址法是您在上面的示例中已經(jīng)實現(xiàn)的,它由使用另一個數(shù)據(jù)結(jié)構(gòu)在同一個bucket中創(chuàng)建一個值鏈組成。在那個示例中,您使用了一個嵌套列表,當(dāng)在超額占用的bucket中查找特定值時,必須對該列表進(jìn)行完全掃描。

        在開放尋址策略中,如果您應(yīng)該使用的bucket是忙碌的,那么您只需繼續(xù)搜索要使用的新bucket。要實現(xiàn)這個解決方案,您需要對為新元素分配bucket的方式和檢索鍵值的方式進(jìn)行一些更改。從assignbuckets()函數(shù)開始,您必須使用默認(rèn)值初始化您的bucket,并且如果您應(yīng)該使用的bucket已經(jīng)被占用,則繼續(xù)尋找空的bucket

        以上內(nèi)容為大家介紹了Python中可以hash的數(shù)據(jù)類型,希望對大家有所幫助,如果想要了解更多Python相關(guān)知識,請關(guān)注IT培訓(xùn)機構(gòu):千鋒教育。

        聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
        10年以上業(yè)內(nèi)強師集結(jié),手把手帶你蛻變精英
        請您保持通訊暢通,專屬學(xué)習(xí)老師24小時內(nèi)將與您1V1溝通
        免費領(lǐng)取
        今日已有369人領(lǐng)取成功
        劉同學(xué) 138****2860 剛剛成功領(lǐng)取
        王同學(xué) 131****2015 剛剛成功領(lǐng)取
        張同學(xué) 133****4652 剛剛成功領(lǐng)取
        李同學(xué) 135****8607 剛剛成功領(lǐng)取
        楊同學(xué) 132****5667 剛剛成功領(lǐng)取
        岳同學(xué) 134****6652 剛剛成功領(lǐng)取
        梁同學(xué) 157****2950 剛剛成功領(lǐng)取
        劉同學(xué) 189****1015 剛剛成功領(lǐng)取
        張同學(xué) 155****4678 剛剛成功領(lǐng)取
        鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
        董同學(xué) 138****2867 剛剛成功領(lǐng)取
        周同學(xué) 136****3602 剛剛成功領(lǐng)取
        相關(guān)推薦HOT
        普安县| 璧山县| 兰坪| 牟定县| 峨边| 漳平市| 留坝县| 铜鼓县| 永仁县| 北辰区| 谷城县| 自贡市| 杂多县| 临漳县| 黔西县| 凤阳县| 平度市| 岑溪市| 蒲城县| 永泰县| 石首市| 四川省| 钟祥市| 云和县| 龙游县| 伽师县| 贵州省| 长岛县| 勃利县| 定日县| 莒南县| 五原县| 会宁县| 寿光市| 正宁县| 渭源县| 如皋市| 张家港市| 耿马| 什邡市| 阿巴嘎旗|