作者henry8168 (番薯猴)
看板Python
标题[问题] random.choice 的 replace 问题
时间Tue Mar 20 11:23:22 2018
我用 Python 3,
以前有个好用的参数在 random.choice() 内叫做 replace,
改成 False 就可以不重复随机选取。
我有个 list_t 想给这个函式随机选取其中之一,
但在最新的 python 3 的 random 里面,
用 replace 这个参数就会报错,请问有效能比较好的写法来取代这功能吗?
用 in 来判断是否被选取过会花太多时间。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 60.248.17.229
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1521516206.A.F94.html
1F:推 vfgce: python的random.choice()是从seqenuce中随机取一个,当然 03/20 11:46
2F:→ vfgce: 没有replace的问题,你要取多个但不重覆,就用random.sample 03/20 11:47
3F:→ 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
4F:推 vfgce: 请问每次回圈不重复和一次抓k个,再来回圈,有差别吗? 03/20 13:36
5F:→ vfgce: repalce参数本来就是为了一次抓多个.... 03/20 13:38
6F:→ 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
7F:推 goldflower: 写个random.shuffle(list(range(n)))用这当sample? 03/20 15:40
8F:→ goldflower: 如果你不想动你原本的array的话啦 03/20 15:40
9F:推 vfgce: 用random.choice本来就没动到原先的list. 03/20 16:10
10F:→ vfgce: 你要用shuffle再回圈也可,但一来原先list改变过,二来後面 03/20 16:11
11F:→ vfgce: 要回圈时,要指定range(k),用numpy的random.choice或python 03/20 16:15
12F:→ vfgce: random.sample传回新LIST,不改变旧LIST,回圈时直接使用整个 03/20 16:17
13F:→ vfgce: 新LIST,不用指定RANGE 03/20 16:17
14F:→ vfgce: 你若使用numpy的random.choice还是得指定replace=False, 03/20 16:19
15F:推 vfgce: 预设是True. 03/20 16:20