[英]Generate random numbers from a distribution given by a list of numbers in python
[英]Want to choose multiple random numbers from a given list of numbers in python
在 Python 中,我如何從給定的列表中選擇兩個或多個隨機數,以便以相同的順序選擇數字?迭代和如前所述 random.sample 沒有給出令人滿意的答案。例如:
import random
a=['1','2','3','4','5','6','7','8']
b=['4','3','9','2','7','1','6','5']
c=random.sample(a,4)
d=random.sample(b,4)
print "c=",c
print "d=",d
代碼給了我以下結果:
c=['4','2','3','8']
d=['1','9','5','4']
但我想要的答案是:
c=['4','5','6','7']
d=['9','2','7','1']
或者
c=['5','6','7','8']
d=['7','1','6','5']
要隨機獲取兩個樣本,請使用random.sample
。 首先,讓我們定義一個列表:
>>> lst = [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
現在,讓我們隨機獲取兩個樣本:
>>> random.sample(lst, 2)
[13, 16]
>>> random.sample(lst, 2)
[10, 12]
采樣無需替換即可完成。
看起來您想要從隨機偏移量開始的四個連續值,而不是序列中任何位置的四個值。 所以不要使用sample
,只需選擇一個隨機起點(足夠早以確保切片不會從list
的末尾運行並最終比所需的短),然后從那里開始切片四個元素:
import random
...
selectcnt = 4
cstart = random.randint(0, len(a) - selectcnt)
c = a[cstart:cstart + selectcnt]
dstart = random.randint(0, len(b) - selectcnt)
d = b[dstart:dstart + selectcnt]
您可以將其分解以使其更好一些(允許您進行單行單獨選擇):
import random
def get_random_slice(seq, slicelen):
'''Get slicelen items from seq beginning at a random offset'''
start = random.randint(0, len(seq) - slicelen)
return seq[start:start + slicelen]
c = get_random_slice(a, 4)
d = get_random_slice(b, 4)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.