簡體   English   中英

如何為x> len(list)從列表中選擇x個隨機元素?

[英]How do I pick x random elements from a list, for x > len(list)?

我需要從列表中選擇隨機元素。 而且隨機元素的數量大於列表的長度(因此我將重復)。 因此,我不能使用random.sample(),因為樣本不能大於總體。 有沒有人有辦法解決嗎?

例如:

lst = [1,2,3,4]

如何從此列表中選擇5個隨機元素,例如[1,4,3,1,2]?

如果我正確理解,那么您想從總體中隨機選擇,這應該可以解決問題:

import random

list = [1, 2, 3, 4]

random_elements = [random.choice(list) for n in range(5)]
import numpy
lst = [1,2,3,4]
choices = numpy.random.choice(lst, size=5, replace=True)

在循環或列表理解中使用random.choice可以從輸入列表中返回隨機元素。

這是一個列表理解示例:

from random import choice

lst =  [10, 20, 30, 40]

num = 5
seq = [choice(lst) for _ in range(num)]
print(seq)

典型輸出

[20, 40, 10, 30, 20]

這與使用“傳統for循環:

from random import choice

lst =  [10, 20, 30, 40]

num = 5
seq = []
for _ in range(num):
    seq.append(choice(lst))
print(seq)

您不需要第三方模塊。 只需使用列表理解即可:

choices = [random.choice(lst) for _ in range(5)]

另一種稍微短一些但不那么有效的方式是:

choices = list(map(random.choice, [lst]*5))

在Python2中, map()已經返回一個列表,因此您可以執行以下操作:

choices = map(random.choice, [lst]*5)

我的答案涉及random.choice函數和列表理解

我還建議將魔術放入名稱明確表明其功能的函數中。

import random

def pick_n_samples_from_list(n, l):
    return [random.choice(l) for n in range(n)]

n = 5
lst = [1, 2, 3, 4]
print(pick_n_samples_from_list(n, lst))
>[3, 1, 4, 4, 1]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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