Pythonでランダムな値を生成するには、random
モジュールを使用します。random
モジュールには、数値、リストの要素、文字列などのランダムなデータを生成するためのさまざまな関数が用意されています。以下に、ランダム処理のバリエーションを紹介します。
1. 乱数(ランダムな数値)の生成
a. 0以上1未満の小数を生成(random.random())
0以上1未満のランダムな浮動小数点数を生成します。
import random
print(random.random()) # 例: 0.6748392193
b. 範囲内の小数を生成(random.uniform(a, b))
指定した範囲 [a, b]
の間でランダムな浮動小数点数を生成します。
print(random.uniform(1.5, 5.5)) # 例: 3.6728392193
c. 範囲内の整数を生成(random.randint(a, b))
a
以上 b
以下の整数をランダムに生成します。
print(random.randint(1, 10)) # 例: 7
d. 範囲内の整数をランダムに生成(random.randrange(start, stop, step))
start
からstop-1
までの整数をstep
ごとに選択します。
print(random.randrange(1, 10, 2)) # 例: 3, 5, 7, 9 のいずれか
2. リストやシーケンスからランダムに選択
a. リストから1つの要素をランダムに選択(random.choice(seq))
リスト、タプル、文字列などのシーケンスからランダムな要素を1つ取得します。
fruits = ["apple", "banana", "cherry", "date"]
print(random.choice(fruits)) # 例: "banana"
b. リストから複数の要素をランダムに選択(random.choices(seq, k=n))
- 重複を許可して、リストから
k
個の要素を選択します。
colors = ["red", "blue", "green", "yellow"]
print(random.choices(colors, k=2)) # 例: ["green", "blue"]
c. リストから重複なしで複数の要素をランダムに選択(random.sample(seq, k))
- 重複なし で
k
個の要素を選択します(k
はリストの長さ以下)。
numbers = [1, 2, 3, 4, 5]
print(random.sample(numbers, 3)) # 例: [2, 5, 1]
3. リストの要素をシャッフル(並び替え)
a. リストをシャッフル(random.shuffle(seq))
- リストの要素をランダムに並び替えます。(元のリストが変更される)
cards = ["A", "2", "3", "4", "5"]
random.shuffle(cards)
print(cards) # 例: ['3', '5', 'A', '2', '4']
4. 確率を考慮したランダム処理
a. 重み付きのランダム選択(random.choices(population, weights, k))
weights
で各要素の選ばれる確率を指定できます。
items = ["apple", "banana", "cherry"]
weights = [10, 1, 1] # "apple" が選ばれやすい
print(random.choices(items, weights=weights, k=5)) # 例: ['apple', 'apple', 'banana', 'apple', 'cherry']
5. ランダムな文字列の生成
a. 英数字を含むランダムな文字列を生成(random.choices() + string モジュール)
string.ascii_letters
(英大文字・小文字)string.digits
(数字)string.punctuation
(記号)
import string
random_string = ''.join(random.choices(string.ascii_letters + string.digits, k=10))
print(random_string) # 例: 'A7xGf2mP0Z'
6. 正規分布に基づくランダム値の生成
a. 標準正規分布(random.gauss(mu, sigma))
- 平均
mu
、標準偏差sigma
の正規分布に基づく値を生成。
mean = 50
std_dev = 10
print(random.gauss(mean, std_dev)) # 例: 47.23
7. シード(random.seed())を使って再現可能な乱数を生成
random.seed(value)
を設定すると、同じ乱数列を再現できます。(デバッグやテストに便利)
random.seed(42) # シード値を設定
print(random.randint(1, 100)) # 例: 81(毎回同じ値が出る)
8. NumPy を使った高速なランダム処理
より大規模なランダム処理が必要な場合、numpy.random
を使用すると効率的に乱数を生成できます。
import numpy as np
# 0 以上 1 未満のランダムな小数を 3×3 の配列で生成
print(np.random.rand(3, 3))
# -10 から 10 までの整数をランダムに生成
print(np.random.randint(-10, 10, size=(3, 3)))
9. くじ引きシミュレーション(応用例)
以下のように、ランダムな要素を使って簡単なくじ引きプログラムを作成できます。
lottery_numbers = list(range(1, 50))
winning_numbers = random.sample(lottery_numbers, 6) # 6つの異なる数字を取得
print("当選番号:", winning_numbers)
まとめ
Pythonのランダム処理には以下のようなさまざまな方法があります。
- 乱数の生成(
random.random()
,random.uniform()
,random.randint()
) - リストからランダムに選択(
random.choice()
,random.sample()
,random.choices()
) - リストのシャッフル(
random.shuffle()
) - 重み付きのランダム処理(
random.choices(weights)
) - 正規分布の乱数(
random.gauss()
) - シードの設定(
random.seed()
)
リンク
リンク
リンク