問題
長さ$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
|