[問題] random.choice 的 replace 問題

看板Python作者 (番薯猴)時間7年前 (2018/03/20 11:23), 7年前編輯推噓6(6010)
留言16則, 3人參與, 7年前最新討論串1/1
我用 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

03/20 11:46, 7年前 , 1F
python的random.choice()是從seqenuce中隨機取一個,當然
03/20 11:46, 1F

03/20 11:47, 7年前 , 2F
沒有replace的問題,你要取多個但不重覆,就用random.sample
03/20 11:47, 2F

03/20 11:48, 7年前 , 3F
我想你記錯函數了,numpy的random.choice才有replace選項
03/20 11:48, 3F
ok 看來我搞混兩種 random 了。 random.sample() 是有這個功能, 可是我希望的是在迴圈內每次隨機抓到的都是不重複的, random.sample() 是一口氣隨機抓 k 個 items。 ※ 編輯: henry8168 (60.248.17.229), 03/20/2018 12:37:43

03/20 13:36, 7年前 , 4F
請問每次迴圈不重複和一次抓k個,再來迴圈,有差別嗎?
03/20 13:36, 4F

03/20 13:38, 7年前 , 5F
repalce參數本來就是為了一次抓多個....
03/20 13:38, 5F

03/20 13:39, 7年前 , 6F
numpy的random.choice也是一次抓多個...
03/20 13:39, 6F
因為我 sample 的對象是 list,那其實先 random.shuffle() 過後,再依序存取也可吧 這樣 replace 參數也幫不上忙了 orz ※ 編輯: henry8168 (60.248.17.229), 03/20/2018 15:08:27

03/20 15:40, 7年前 , 7F
寫個random.shuffle(list(range(n)))用這當sample?
03/20 15:40, 7F

03/20 15:40, 7年前 , 8F
如果你不想動你原本的array的話啦
03/20 15:40, 8F

03/20 16:10, 7年前 , 9F
用random.choice本來就沒動到原先的list.
03/20 16:10, 9F

03/20 16:11, 7年前 , 10F
你要用shuffle再迴圈也可,但一來原先list改變過,二來後面
03/20 16:11, 10F

03/20 16:15, 7年前 , 11F
要迴圈時,要指定range(k),用numpy的random.choice或python
03/20 16:15, 11F

03/20 16:17, 7年前 , 12F
random.sample傳回新LIST,不改變舊LIST,迴圈時直接使用整個
03/20 16:17, 12F

03/20 16:17, 7年前 , 13F
新LIST,不用指定RANGE
03/20 16:17, 13F

03/20 16:19, 7年前 , 14F
你若使用numpy的random.choice還是得指定replace=False,
03/20 16:19, 14F

03/20 16:20, 7年前 , 15F
預設是True.
03/20 16:20, 15F

03/20 20:07, 7年前 , 16F
https://stackoverflow.com/q/10054732 要省空間參考這篇
03/20 20:07, 16F
文章代碼(AID): #1Qi7wk-K (Python)
文章代碼(AID): #1Qi7wk-K (Python)