簡體   English   中英

想從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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM