2017-06-12 16 views
6

0-9の間に4つの乱数を生成しようとしています。 Iが容易forループを使用して、この達成することができる:直接forループを使用することなく、おそらく、forループなしでn個の乱数を生成する方法

digits = [random.randrange(10) for i in range(4)] 

ことが可能であると仮定すると、私は同じ結果を生成する他の方法に疑問を抱きました。

digits = itertools.repeat(random.randrange(10), 4) 

私の質問の主な目的は、追加のメソッドに自分自身を公開することです:私は、これは仕事しませんでしたitertoolsで実験し、ました。おかげさまで

+1

- あなたはそこ 'もありますrandom.choices' –

答えて

9
numpy.random.randint(0, 10, size=4) 

またはそれから、これは本当に私がどうなるものではありませんが、あなたは追加のメソッドに自分自身を公開したいと思いますので、itertools

list(map(random.randrange, itertools.repeat(10, 4))) 

あるいは

list(map(random.randrange, [10]*4)) 
+0

を'itertools'は必要ありません:' list(map (random.randrange、[10] * 4)) ' – Leon

0

を使用するには、 0-9の範囲を利用すると、次のような4つの整数を得ることもできます。

実際には4桁の文字列を生成し、そこから数字を抽出します。

+0

全く独創的ですが面白いアプローチです! – maze88

1

発電機とwhile loopの使用についてはどうですか?

from random import randrange 

def rand(val, repeat=4): 
    j = 1 
    while j <= repeat: 
     yield randrange(val) 
     j += 1 

final = list(rand(10)) 

出力:

また
[2, 6, 8, 8] 

recursion使用:

from random import randrange 

def rand(val, repeat=4, b=1, temp=[]): 
    if b < repeat: 
     temp.append(randrange(val)) 
     return rand(val, b= b+1, temp=temp) 
    else: 
     return temp + [randrange(val)] 

final = rand(10) 
print(final) 

出力:Pythonの3.6で

[1, 9, 3, 1] 
関連する問題