日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python中ht表示什么_如何看待某国内大公司Python面试题,有关dict中初始化为固定值?...

發布時間:2024/7/23 python 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python中ht表示什么_如何看待某国内大公司Python面试题,有关dict中初始化为固定值?... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

職業發展

Python

如何看待某國內大公司Python面試題,有關dict中初始化為固定值?

閱讀下面的代碼,寫出A0,A1至A6的最終值。

A0 = dict(zip(('a','b','c','d','e'),(1,2,3,4,5)))

A1 = range(10)

A2 = [i for i in A1 if i in A0]

A3 = [A0[s] for s in A0]

A4 = [i for i in A1 if i in A3]

A5 = {i:i*i for i in A1}

A6 = [[i,i*i] for i in A1]

答案在這里:

A0 = {'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4}

A1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

A2 = []

A3 = [1, 3, 2, 5, 4]

A4 = [1, 2, 3, 4, 5]

A5 = {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}

A6 = [[0, 0], [1, 1], [2, 4], [3, 9], [4, 16], [5, 25], [6, 36], [7, 49], [8, 64], [9, 81]]

請給出為什么A3= [1, 3, 2, 5, 4] 的理由,即A0初始化為什么為固定值

HTLiu ? ? 1502017-05-19 00:02:13

這個是根據Python2.X的dict的源碼來實現的, 主要是 PyDict_SetItem()這個函數, 在字典里面添加一個項的步驟是,先對key求hash值,之后hash值與掩碼mask做&操作,得到哈希表中空位置(slot),如果該位置未被占用,那key的槽就是它了,否則根據 開放定址 繼續尋找。 因此輸出的key的順序就是在哈希表中的順序,為什么是13254的原因如下:ln [16]: hash('a') & 7

Out[16]: 0

In [18]: hash('b') & 7

Out[18]: 3

In [19]: hash('c') & 7

Out[19]: 2

In [20]: hash('d') & 7

Out[20]: 5

In [21]: hash('e') & 7

Out[21]: 4

按照在哈希表中的順序就是: acbed, 對應到題目就是13254.

ps: 為什么&7 是因為初始默認大小是8:#define PyDict_MINSIZE 8 ,

掩碼mask=size-1,即:8-1 = 7.

如果元素個數超過了當前size的 2/3了,就會重新擴展。

蘇兆君 ? ? 22017-05-19 15:35:26

python2的結果:{'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4}

python3的結果:{'a': 1, 'd': 4, 'e': 5, 'b': 2, 'c': 3}

我就很訥悶了,招這樣的人是來寫Python解釋器的還是寫Python項目的。出題的人不去考Python庫的知識面,來考數據在Python在解釋器中的生成規則,就像你做飯不去考慮怎樣去做熟它,而是去考慮這些米施了多少肥才長這么飽滿。

HTLiu ? ? 12017-05-19 17:21:55

哈哈 原來是釣魚貼

Qing Meng ? ? 12017-05-19 15:27:02

我win10+Python 3.6.0以及ubuntu 1604+Python 3.5.2上都測試hash('a'),hash('b')的結果,每次都不一樣,不知道為什么。

HTLiu ? ? 12017-05-19 14:41:13

就是對哈希表resize, 然后將舊表數據復制到新表, 再對元素進行hash。

Qing Meng ? ? 02017-05-21 14:55:46

這個不太理解。'a'這個字符字面量在python中的表示跟content為'a'的字符串對象不一樣嗎?

安瀾 ? ? 02017-05-21 13:39:52

要注意你是對"a"這個字符hash還是content為"a"的字符串對象hash

王浩淼 ? ? 02017-05-19 20:08:47

牛逼,學習了,感謝

劉順裕 ? ? 02017-05-19 16:09:17

其實我有答案,您的答案是我期望得到的,我也是翻閱了文檔查看了dict源碼和默認設置

Qing Meng ? ? 02017-05-19 15:51:43

謝謝解答!

HTLiu ? ? 02017-05-19 15:47:01

哈哈,的確是。python對dict的優化每個版本都有不一樣的,據說python3.6對dict又是一次大改動,性能提高了不少。 不過在python2.x dict已經固定了,只是小改小鬧。 python3.x 變化較大。

HTLiu ? ? 02017-05-19 15:42:52

上述的所有均是基于 Python 2.X, 開頭也聲明了。 Python3.X的dict 機制有很大不一樣。甚至python3.6和python3.5 都變化很大,具體python3.x 沒有研究過。 因為python的很多對象均是靠字典來維護的,因此每一個大版本都會對dict 做優化。

HTLiu ? ? 02017-05-19 14:46:00

不會吧, 我在雙系統(win 10, ubuntu 1604) 均測試了三種情況都是, acbed, 有截圖復現嗎

知乎用戶 ? ? 02017-05-19 14:40:06

感激,學習了!

王奕嵐 ? ? 02017-05-19 14:22:43

學習了!請問擴展機制是什么?

codog ? ? 02017-05-19 14:21:02

我在pycharm上執行結果完全隨機的,在ipython下執行是12345,在cmd下執行才有13254的結果,都是一個python解釋器(版本2.7.12),為何?

HTLiu ? ? 02017-05-19 08:08:02

應該是一樣的。我記得python源碼中采取的hash函數是一種比較常規的hash算法,是固定的。此外我也測試了同一系統下不同的python進程得到的hash值是一樣的呀。如果32位/64位的機器或許會不一樣。

知乎用戶 ? ? 02017-05-19 08:03:14

謝謝

Qing Meng ? ? 02017-05-19 01:03:14

謝謝,學習了

有個問題,每次啟動python解釋器,都能夠保證一個字符串(例如'a')的hash值相同的嗎?

不同python解釋器進程,built-in的hash()函數似乎對同一個字符串的hash結果不一樣。

總結

以上是生活随笔為你收集整理的python中ht表示什么_如何看待某国内大公司Python面试题,有关dict中初始化为固定值?...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。