検索ガイド -Search Guide-

単語と単語を空白で区切ることで AND 検索になります。
例: python デコレータ ('python' と 'デコレータ' 両方を含む記事を検索します)
単語の前に '-' を付けることで NOT 検索になります。
例: python -デコレータ ('python' は含むが 'デコレータ' は含まない記事を検索します)
" (ダブルクオート) で語句を囲むことで 完全一致検索になります。
例: "python data" 実装 ('python data' と '実装' 両方を含む記事を検索します。'python data 実装' の検索とは異なります。)
  • ただいまサイドメニューのテスト中/ただいまサイドメニューのテスト中
  • ただいまサイドメニューのテスト中/ただいまサイドメニューのテスト中
  • ただいまサイドメニューのテスト中/ただいまサイドメニューのテスト中
  • ただいまサイドメニューのテスト中/ただいまサイドメニューのテスト中
  • ただいまサイドメニューのテスト中/ただいまサイドメニューのテスト中
  • ただいまサイドメニューのテスト中/ただいまサイドメニューのテスト中
  • ただいまサイドメニューのテスト中/ただいまサイドメニューのテスト中
  • ただいまサイドメニューのテスト中/ただいまサイドメニューのテスト中
  • ただいまサイドメニューのテスト中/ただいまサイドメニューのテスト中
  • ただいまサイドメニューのテスト中/ただいまサイドメニューのテスト中
  • ただいまサイドメニューのテスト中/ただいまサイドメニューのテスト中
>>
python_cookbook

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 バイトの暗号的に強固な乱数を返します。