2017-06-12 17 views
6

Próbuję wygenerować 4 losowe liczby całkowite z zakresu od 0 do 9. można łatwo osiągnąć za pomocąfor pętli:Jak wygenerować n liczb losowych bez pętli for?

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

Zakładając, że jest to możliwe, została zastanawiać innych sposobów uzyskuje się taki sam skutek, może nie bezpośrednio, przy użyciu na pętli. I eksperymentował z itertools i to nie pracy:

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

Głównym celem moje pytanie jest narazić się na dodatkowe metody. Dzięki.

+1

W Pythonie 3.6 - jest również 'random.choices' –

Odpowiedz

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

lub użyć itertools

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

lub nawet

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

You nie potrzebuję 'itertools':' list (map (random.randrange, [10] * 4)) ' – Leon

0

To naprawdę nie jest coś, co chciałbym zrobić, ale skoro chcesz narażać się na dodatkowe metody, a następnie korzystając z zakresu 0-9 można również uzyskać 4 takie liczby całkowite w następujący sposób:

map(int, "%04d"%random.randrange(10**4)) 

W rzeczywistości generuje czterocyfrowy ciąg znaków i wyodrębnia z niego cyfry.

+0

Zdecydowanie niekonwencjonalne, ale interesujące podejście! – maze88

1

Co powiesz na używanie generatora i 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)) 

wyjściowa:

[2, 6, 8, 8] 

Ponadto, stosując 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) 

wyjściowy:

[1, 9, 3, 1] 
Powiązane problemy