Python でのランダム モジュールの分析 (例付き)

不言
リリース: 2018-11-23 16:57:36
転載
3142 人が閲覧しました
この記事の内容は Python のランダムモジュールの解析に関するものです (サンプル付き) 一定の参考価値がありますので、困っている友人は参考にしていただければ幸いです。

random は Python が疑似乱数を生成するモジュールで、ランダム シードのデフォルトはシステム クロックです。モジュール内のメソッドは以下で分析されます:

1.random.randint(start,stop)

これは整数乱数を生成する関数です. パラメーター start は最小値を表し、パラメータ stop は最大値を表し、両端の値を取得できます;

関数アルゴリズムの時間計算量は次のとおりです: O(1)

コア ソース コード:

return self.randrange(a,b+1) #调用randrange函数来处理
ログイン後にコピー

例:

import random

for i in range(20):
    print(random.randint(0,10),end=' ')
ログイン後にコピー

結果:

1 1 7 5 10 1 4 1 0 8 7 7 2 10 6 8 6 0 3 1
ログイン後にコピー

2、random.randrange(start,stop,step)

もオプションのランダムな整数関数です。パラメータ

  • Only パラメータが 1 つある場合、デフォルトのランダム範囲は 0 からこのパラメータまでで、最初に閉じて後で開きます。パラメータが 2 つあり、最小値と最大値を表し、最初に閉じて後で開きます

  • パラメータが 3 つある場合、最小値、最大値、ステップ サイズを表し、最初に閉じます後で開きます

  • 関数アルゴリズムの時間計算量: O(1)

  • コア ソース コード:
return istart+istep*self._randbelow(n) #调用randbelow函数处理
ログイン後にコピー

インスタンス:

import random

for i in range(10):
    print(random.randrange(10),end=' ') #产生0到10(不包括10)的随机数

print("")

for i in range(10):
    print(random.randrange(5,10),end=' ') #产生5到10(不包括10)的随机数

print("")

for i in range(10):
    print(random.randrange(5,100,5),end=' ') #产生5到100(不包括100)范围内的5倍整数的随机数
ログイン後にコピー

Result:

1 1 2 4 4 3 4 6 1 4
6 6 5 7 8 9 6 6 6 5
30 50 20 40 75 85 25 65 80 95
ログイン後にコピー

3.random.choice(seq)

ランダム選択関数、seq は空ではないセットで、セット内の要素を出力用にランダムに選択します。要素の制限はありません。

コア ソース コード:

i=self._randbelow(len(seq)) #由randbelow函数得到随机地下标
return seq[i]
ログイン後にコピー

関数アルゴリズムの時間責任: O(1)

例:

import random

list3=["mark","帅",18,[183,138]]
for j in range(10):
    print(random.choice(list3),end=' ')
ログイン後にコピー

コード:

mark 帅 [183, 138] 18 mark 18 mark 帅 帅 [183, 138]
ログイン後にコピー

4.random.random()

この関数は、パラメータなしで、0.0 から 1.0 までの任意の浮動小数点数を形成します。左側が閉じ、右側が開きます。

例:

import random

for j in range(5):
    print(random.random(),end=' ')
ログイン後にコピー

実行結果:

0.357486615834809 0.5928029747238529 0.37053940107869987 0.3802224543848519 0.9741990956161711
ログイン後にコピー

5.random.send(n=None)

乱数生成関数を初期化できます。 n はランダム シードを表します。n=None の場合、ランダム シードはシステム時間です。n がその他のデータ (int、str など) の場合、指定されたデータがランダム シードとして使用されます。乱数シーケンスは、次の時点で生成されます。今回は固定です。

例:

import random

random.seed("mark")
for j in range(20):#无论启动多少次程序,输出的序列不变
    print(random.randint(0,10),end=' ')
ログイン後にコピー

結果:

4 1 10 5 6 2 8 5 5 10 7 2 9 6 2 6 0 5 10 10
ログイン後にコピー

6.random.getstate() および random.setstate(state):

getstate() 関数は次のとおりです。 used 乱数ジェネレーターの状態を記録するには、setstate(state) 関数を使用してジェネレーターを最後に記録された状態に復元します。

例:

import random

tuple1=random.getstate()#记录生成器的状态
for i in range(20):
    print(random.randint(0,10),end=' ')
print()
random.setstate(tuple1)#传入参数回复之间的状态
for i in range(20):
    print(random.randint(0,10),end=' ')#两次输出的结果一致
ログイン後にコピー

結果:

5 7 9 9 10 10 2 3 7 1 1 6 1 7 1 1 7 4 2 2
5 7 9 9 10 10 2 3 7 1 1 6 1 7 1 1 7 4 2 2
ログイン後にコピー

7.random.shuffle(seq,random=None):

受信したコレクション シーケンス操作をシャッフルします。これは、文字列やリストなどの変更可能なシーケンスに対してのみ使用できます。タプルなどの不変のシーケンスに対してはエラーが報告されます。random は、random=random など、アウトオブオーダーの演算方法を選択するために使用されます。

コア ソース コード:

for i in reversed(range(1,len(x))):
    j=randbelow(i+1)
    x[i],x[j]=x[k],x[i]
ログイン後にコピー

関数アルゴリズムの時間計算量: O(n)

例:

import random

lists=['mark','帅哥',18,[183,138]]
print(lists)
random.shuffle(lists,random=None)
print(lists)
ログイン後にコピー

結果:

['mark', '帅哥', 18, [183, 138]]
['帅哥', 18, 'mark', [183, 138]]
ログイン後にコピー

8.random.sample(population,k):

population パラメータは、リスト、タプル、セット、文字列などのシーケンスであり、セットから k 個の要素がランダムに選択されて、新しいシーケンス。元のシーケンスは変更されません。

最悪の時間計算量: O(n*n)

例:

import random

lists=['mark','帅哥',18,[183,138]]
lists2=random.sample(lists,3)
print(lists)
print(lists2)
ログイン後にコピー

結果:

['mark', '帅哥', 18, [183, 138]]
['mark', [183, 138], '帅哥']
ログイン後にコピー

9、random.uniform(a, b)

パラメータ a と b の間の浮動小数点数を生成する関数。a>b の場合、b と a の間の浮動小数点数を生成します。

コア ソース コード:

return a+(b-a)*self.random()
ログイン後にコピー

時間計算量: 0(1)

例:

import random

for i in range(5):
    print(random.uniform(10,1))
ログイン後にコピー

結果:

2.8826090956524606
1.5211191352548408
3.2397454278562794
4.147879756524251
6.532545391009419
ログイン後にコピー

以上がPython でのランダム モジュールの分析 (例付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:segmentfault.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!