看板 Python 關於我們 聯絡資訊
我用 Python 3, 以前有個好用的參數在 random.choice() 內叫做 replace, 改成 False 就可以不重複隨機選取。 我有個 list_t 想給這個函式隨機選取其中之一, 但在最新的 python 3 的 random 裡面, 用 replace 這個參數就會報錯,請問有效能比較好的寫法來取代這功能嗎? 用 in 來判斷是否被選取過會花太多時間。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.248.17.229 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1521516206.A.F94.html
vfgce: python的random.choice()是從seqenuce中隨機取一個,當然 03/20 11:46
vfgce: 沒有replace的問題,你要取多個但不重覆,就用random.sample 03/20 11:47
vfgce: 我想你記錯函數了,numpy的random.choice才有replace選項 03/20 11:48
ok 看來我搞混兩種 random 了。 random.sample() 是有這個功能, 可是我希望的是在迴圈內每次隨機抓到的都是不重複的, random.sample() 是一口氣隨機抓 k 個 items。 ※ 編輯: henry8168 (60.248.17.229), 03/20/2018 12:37:43
vfgce: 請問每次迴圈不重複和一次抓k個,再來迴圈,有差別嗎? 03/20 13:36
vfgce: repalce參數本來就是為了一次抓多個.... 03/20 13:38
vfgce: numpy的random.choice也是一次抓多個... 03/20 13:39
因為我 sample 的對象是 list,那其實先 random.shuffle() 過後,再依序存取也可吧 這樣 replace 參數也幫不上忙了 orz ※ 編輯: henry8168 (60.248.17.229), 03/20/2018 15:08:27
goldflower: 寫個random.shuffle(list(range(n)))用這當sample? 03/20 15:40
goldflower: 如果你不想動你原本的array的話啦 03/20 15:40
vfgce: 用random.choice本來就沒動到原先的list. 03/20 16:10
vfgce: 你要用shuffle再迴圈也可,但一來原先list改變過,二來後面 03/20 16:11
vfgce: 要迴圈時,要指定range(k),用numpy的random.choice或python 03/20 16:15
vfgce: random.sample傳回新LIST,不改變舊LIST,迴圈時直接使用整個 03/20 16:17
vfgce: 新LIST,不用指定RANGE 03/20 16:17
vfgce: 你若使用numpy的random.choice還是得指定replace=False, 03/20 16:19
vfgce: 預設是True. 03/20 16:20
ckc1ark: https://stackoverflow.com/q/10054732 要省空間參考這篇 03/20 20:07