Pick Up M Elements From List

# 問題

長さ$N$の配列からランダムに$M$個要素を取り出した配列を求めよ.

# 答え

標準ライブラリを使う.

1
2
3
4
5
import random

def pick_m_random_elements(lst, m):
    random.shuffle(lst)
    return lst[:m]

Fisher-Yates アルゴリズムと似た感じでやることもできる.

1
2
3
4
5
6
7
8
9
import random

def pick_m_random_elements(lst, m):
    ret = lst[:m]
    for i in range(m, len(lst), 1):
        j = random.randint(0, i)
        if j < m:
            ret[j] = lst[i]
    return ret
Hugo で構築されています。
テーマ StackJimmy によって設計されています。