python中怎麼把不可雜湊的dict型別的序列中chong fu重複元素變為hashable型別?

時間 2021-06-02 18:37:59

1樓:追遠·J

這個dedupe函式的精華在

yield

item

這條語句上(圖中注釋是我提供的另一種方法)。因為它的存在,

呼叫該函式返回的不是乙個或一組簡單的值,而實乙個生成器 (generator)。

當list函式作用在這個生成器上時,才會執行dedupe內定義的語句。

每執行一次yield這句話,生成器就會吐出乙個item。

所以,這個吐出的順序是取決於yield語句的重複執行次序。

在你這個例子裡,yield item的執行實際上是在被for item in items:這個迴圈控制著,那麼當然是遵從items內的順序;區域性變數seen的作用僅僅是判斷val是否已經出現過,跟這個生成器吐出元素的順序沒有關係。

2樓:黃哥

def dedupe(items,key=None):

seen=set()

for item in items:

val=item if key is None else key(item)

if val not in seen:

yield item

seen.add(val)

這是乙個生成器,順序用yield 產生的,所以順序能保持一致。

用到集合只是用來判斷重複元素,和最後結果的順序無關。

到底什麼是雜湊值,雜湊值到底是怎麼生成的,有什麼用?

doge hash值是通過乙個計算函式把難以比較的字串或者其他型別的資料對映成乙個整數,最常用的就是對映a z的hash值,變成hash str i a 這個數是乙個十進位制數,這個十進位制數把它對映到0 25,也就是陣列下標,但通常來說是對映成1 26,因為方便計算,這是最簡單的hash值,然後這...

Python集合的元素中,為什麼不可以是包含巢狀列表的元組?

又琢磨了一下,突然意識到是不是問題出在這裡呢 好多教材或教程中的 元組是不可變的,可以用作set的元素,或可用作dict的鍵 這句話是不嚴謹的?儘管tuple是 不可變的 其內元素的位址是不可變的,但不等同於tuple就是hashble的。當乙個tuple中的所有元素都是 不可原地修改 的型別的時候...

怎麼用Python把這樣的乘法口訣表打出來?

Pad 3 1 3 3 2 3 6 3 3 94 1 4 4 2 4 8 3 4 12 4 4 165 定義橫豎座標 6 row 1 7 col 1 8 迴圈體 9 while col 9 10 while row col 11 print d d d row,col,row col end t 1...