2 回答

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超6個(gè)贊
您應(yīng)該使用collections.OrderedDict
(或其他有序數(shù)據(jù)結(jié)構(gòu)),而不是set
您的程序是否關(guān)心項(xiàng)目順序(random.sample()
例如)。即使在 Python 3.7 及更高版本中,在撰寫本文時(shí),set
s 也被記錄為無序集合,因此如果插入或枚舉項(xiàng)的順序?qū)δ某绦蚝苤匾?,則不應(yīng)使用它們。
使用 時(shí)set
,您不應(yīng)期望以任何特定順序(即使是偽隨機(jī)順序)插入或枚舉項(xiàng)目。

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超4個(gè)贊
我已經(jīng)找到了解決方案,我將其發(fā)布以防有人覺得有幫助
問題是,在內(nèi)部的某個(gè)時(shí)刻foo()
,我使用了該my_set.pop()
方法而不是set.remove(random.sample (my_set, 1) [0])
. 第一個(gè)my_set.pop()
實(shí)際上并不返回隨機(jī)元素。在Python 3.6中,集合有像列表一樣的具體順序,關(guān)鍵是建立的順序是隨機(jī)生成的,因此,要返回(偽)隨機(jī)元素,該方法總是返回第一個(gè)元素my_set.pop()
。問題是,就我而言,所有進(jìn)程都共享該順序,因此my_set.pop()
在所有進(jìn)程中返回相同的第一個(gè)元素。
添加回答
舉報(bào)