本記事では、Pythonの「ランダムな配列を作成する処理」「配列からランダムに要素を取得する」処理の基本的な使い方を紹介します。
こんな人におすすめ
標準ライブラリrandomを使ってランダムな配列を作成したい。
Numpyでランダム配列を作りたい。
タプルからランダムな要素を取得したい。
文字列からランダムな要素を取得したい。
配列から要素を復元抽出(重複ありで取得)したい。
配列から要素を非復元抽出(重複なしで取得)したい。
主なライブラリ
random
numpy
本ページで使用するライブラリをインポートするときは以下のコードを使用します。
import random import numpy as np
標準ライブラリ(random)を使用してランダムな配列を作成する。
randomライブラリを使って、ランダムな配列を作成します。
1~20の数字をランダムに取得し、配列(List1)に10個追加することでランダム配列を作成します。
List1 = [] # 1~100までの数字をランダムに選んでList1に10個追加する。 for i in range(10): # 1~100までの数字をランダムに抽出しnumに格納 num = random.randint(1,20) # List1にnumを追加 List1.append(num) print(List1) # [16, 10, 7, 13, 12, 19, 18, 13, 5, 1]
numpyライブラリを使用してランダムな配列を作成する。
numpyライブラリを使って、ランダムな配列を作成します。
1~20の数字をランダムに取得し、配列(List2)に10個追加することでランダム配列を作成します。
List2 = [] for i in range(10): # 1~20までの数字をランダムに抽出しnumに格納 num = np.random.randint(1,21) # List2にnumを追加 List2.append(num) print(List2) # [17, 17, 15, 14, 3, 13, 19, 17, 5, 18]
復元抽出(重複有り)で配列からランダムに複数の要素を取得する。
ある配列から重複有りで指定の数の要素を取得します。
以下の例では、List1から3つ、5つ、10つの要素を重複有りで取得しています。
List1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # ランダムに3つ要素を取得する(重複有り) print(random.choices(List1, k=3)) # [3, 8, 5] # ランダムに5つ要素を取得する(重複有り) print(random.choices(List1, k=5)) # [7, 4, 1, 5, 4] # ランダムに10つ要素を取得する(重複有り) print(random.choices(List1, k=10)) # [8, 2, 2, 1, 3, 4, 7, 3, 10, 5]
復元抽出(重複有り)で配列から、抽出されやすさを指定して複数の要素を取得する。
random.choicesには、重みを指定することができる引数が準備されています。
weightsを指定すると、配列の要素ごとに重みを設定することができます。
weightsが大きい要素ほど、選ばれやすくなります。
# weights(重み)を設定。重みが大きい数値が選ばれやすい List1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] weights1 = [1, 2, 3, 5, 8, 8, 5, 3, 2, 1] print(random.choices(List1, weights=weights1, k=10)) # [4, 10, 5, 6, 6, 3, 3, 7, 5, 5]
cum_weightsを指定すると、配列の要素ごとに累積重みを設定することができます。
累積重みでは、前の要素との累積重みの差が大きいほど選ばれやすくなります。
以下の例では、前の要素との累積重みの差が大きい8が一番多く選ばれています。
# cum_weights(累積重み)を設定。重みが大きい数値が選ばれやすい List1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] cum_weights1 = [1, 1, 2, 3, 5, 8, 13, 21, 22, 23] print(random.choices(List1, cum_weights=cum_weights1, k=20)) # [10, 8, 8, 8, 7, 6, 8, 5, 10, 6, 5, 1, 8, 7, 8, 3, 8, 5, 5, 6] # 前の重みとの差が小さいと重みが小さくなるので選ばれにくい
重複なしで配列からランダムに要素を取得する。(非復元抽出)
ある配列から重複無しで指定の数の要素を取得します。
以下の例では、List1から5つ、10つの要素を重複有りで取得しています。
List1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # 重複しない5つの要素を取得 print(random.sample(List1, 5)) # [6, 9, 1, 7, 4] # 重複しない10つの要素を取得 print(random.sample(List1, 10)) # [3, 5, 7, 10, 9, 6, 2, 8, 4, 1]
重複無しで抽出するため、List1の要素より大きな数字を設定するとエラーになります。
# 配列より多い要素を引数に設定するとエラーになる。 print(random.sample(List1, 11)) # ValueError: Sample larger than population or is negative