Python Cookbook [Picking Things at Random : random の活用] 投稿一覧へ戻る
Published 2020年4月13日19:58 by mootaro23
SUPPORT UKRAINE
- Your indifference to the act of cruelty can thrive rogue nations like Russia -
# Problem:
# シーケンスからランダムに要素を取り出したり、乱数を発生させたい。
# Solution:
# random モジュールには様々な関数が用意されています。
# シーケンスからランダムに要素を取り出します。
import random
values = ['Nana', 'Saki', 'Hana', 'Yuka', 'Megu', 'Eri', 'Kumi']
random.choice(values)
# → 'Hana'
random.choice(values)
# → 'Kumi'
random.choice(values)
# → 'Yuka'
random.choice(values)
# → 'Nana'
# シーケンスから N 個の要素を取り出します。ただし、N 個の要素は重複がないように取り出されます。
random.sample(values, 2)
# → ['Kumi', 'Hana']
random.sample(values, 2)
# → ['Nana', 'Eri']
random.sample(values, 4)
# → ['Megu', 'Hana', 'Nana', 'Kumi']
random.sample(values, 4)
# → ['Saki', 'Yuka', 'Eri', 'Kumi']
# シーケンス内の要素をシャッフルします。
random.shuffle(values)
values
# → ['Yuka', 'Nana', 'Saki', 'Hana', 'Eri', 'Megu', 'Kumi']
random.shuffle(values)
values
# → ['Kumi', 'Megu', 'Hana', 'Yuka', 'Saki', 'Nana', 'Eri']
# ランダムな整数を発生させます。
random.randint(0, 10)
# → 7
random.randint(0, 10)
# → 0
random.randint(0, 10)
# → 4
# 0.0 から 1.0 の間のランダムな浮動小数点数を発生させます。
random.random()
# → 0.7516435571401778
random.random()
# → 0.9080073461935058
random.random()
# → 0.17004346943699422
# N 桁の乱数ビットで表現される整数を返します。
random.getrandbits(100)
# → 1001294788148984200066165108852
# random モジュールは Mersenne Twister algorithm (メルセンヌツイスタ生成器) を基に乱数を生成させています。これは決定的アルゴリズムですが、random.seed() 関数を利用することで乱数発生源を変更することが可能です。
# 乱数発生源としてシステムタイマー、もしくは、os.urandom() を利用します。
random.seed()
# 与えられた整数を利用します。
random.seed(12345)
# 与えられたバイトデータを利用します。
random.seed(b'bytedata')
# ここまで紹介した以外にも、random モジュールには様々な実数値分布に対応する関数が含まれています。例えば、random.uniform() は均一分布から乱数を発生しますし、random.gauss() はガウス分布 (正規分布) に基づいて乱数を発生させます。
# 最後に。
# random モジュール内の関数を暗号化やセキュリティを扱うプログラムで利用してはいけません。前述したように random モジュールが基としているメルセンヌツイスタは完全に決定論的だからです。
# セキュリティに関連するプログラム中では ssl モジュールで提供されている関数を利用するようにします。例えば ssl.RAND_bytes(N) は N バイトの暗号的に強固な乱数を返します。
# シーケンスからランダムに要素を取り出したり、乱数を発生させたい。
# Solution:
# random モジュールには様々な関数が用意されています。
# シーケンスからランダムに要素を取り出します。
import random
values = ['Nana', 'Saki', 'Hana', 'Yuka', 'Megu', 'Eri', 'Kumi']
random.choice(values)
# → 'Hana'
random.choice(values)
# → 'Kumi'
random.choice(values)
# → 'Yuka'
random.choice(values)
# → 'Nana'
# シーケンスから N 個の要素を取り出します。ただし、N 個の要素は重複がないように取り出されます。
random.sample(values, 2)
# → ['Kumi', 'Hana']
random.sample(values, 2)
# → ['Nana', 'Eri']
random.sample(values, 4)
# → ['Megu', 'Hana', 'Nana', 'Kumi']
random.sample(values, 4)
# → ['Saki', 'Yuka', 'Eri', 'Kumi']
# シーケンス内の要素をシャッフルします。
random.shuffle(values)
values
# → ['Yuka', 'Nana', 'Saki', 'Hana', 'Eri', 'Megu', 'Kumi']
random.shuffle(values)
values
# → ['Kumi', 'Megu', 'Hana', 'Yuka', 'Saki', 'Nana', 'Eri']
# ランダムな整数を発生させます。
random.randint(0, 10)
# → 7
random.randint(0, 10)
# → 0
random.randint(0, 10)
# → 4
# 0.0 から 1.0 の間のランダムな浮動小数点数を発生させます。
random.random()
# → 0.7516435571401778
random.random()
# → 0.9080073461935058
random.random()
# → 0.17004346943699422
# N 桁の乱数ビットで表現される整数を返します。
random.getrandbits(100)
# → 1001294788148984200066165108852
# random モジュールは Mersenne Twister algorithm (メルセンヌツイスタ生成器) を基に乱数を生成させています。これは決定的アルゴリズムですが、random.seed() 関数を利用することで乱数発生源を変更することが可能です。
# 乱数発生源としてシステムタイマー、もしくは、os.urandom() を利用します。
random.seed()
# 与えられた整数を利用します。
random.seed(12345)
# 与えられたバイトデータを利用します。
random.seed(b'bytedata')
# ここまで紹介した以外にも、random モジュールには様々な実数値分布に対応する関数が含まれています。例えば、random.uniform() は均一分布から乱数を発生しますし、random.gauss() はガウス分布 (正規分布) に基づいて乱数を発生させます。
# 最後に。
# random モジュール内の関数を暗号化やセキュリティを扱うプログラムで利用してはいけません。前述したように random モジュールが基としているメルセンヌツイスタは完全に決定論的だからです。
# セキュリティに関連するプログラム中では ssl モジュールで提供されている関数を利用するようにします。例えば ssl.RAND_bytes(N) は N バイトの暗号的に強固な乱数を返します。
この記事に興味のある方は次の記事にも関心を持っているようです...
- People who read this article may also be interested in following articles ... -