[问题] random.choice 的 replace 问题

楼主: henry8168 (番薯猴)   2018-03-20 11:23:22
我用 Python 3,
以前有个好用的参数在 random.choice() 内叫做 replace,
改成 False 就可以不重复随机选取。
我有个 list_t 想给这个函式随机选取其中之一,
但在最新的 python 3 的 random 里面,
用 replace 这个参数就会报错,请问有效能比较好的写法来取代这功能吗?
用 in 来判断是否被选取过会花太多时间。
作者: vfgce (小兵)   2018-03-20 11:46:00
python的random.choice()是从seqenuce中随机取一个,当然没有replace的问题,你要取多个但不重复,就用random.sample我想你记错函数了,numpy的random.choice才有replace选项请问每次循环不重复和一次抓k个,再来循环,有差别吗?repalce参数本来就是为了一次抓多个....numpy的random.choice也是一次抓多个...
作者: goldflower (金色小黄花)   2018-03-20 15:40:00
写个random.shuffle(list(range(n)))用这当sample?如果你不想动你原本的array的话啦
作者: vfgce (小兵)   2018-03-20 16:10:00
用random.choice本来就没动到原先的list.你要用shuffle再循环也可,但一来原先list改变过,二来后面要循环时,要指定range(k),用numpy的random.choice或pythonrandom.sample传回新LIST,不改变旧LIST,循环时直接使用整个新LIST,不用指定RANGE你若使用numpy的random.choice还是得指定replace=False,默认是True.
作者: ckc1ark (伪物)   2018-03-20 20:07:00
https://stackoverflow.com/q/10054732 要省空间参考这篇

Links booklink

Contact Us: admin [ a t ] ucptt.com