Если вам нужно попробовать очень большое количество, вы не можете использовать range
random.sample(range(10000000000000000000000000000000), 10)
, потому что он бросает:
OverflowError: Python int too large to convert to C ssize_t
Кроме того, если random.sample
не может производить количество деталей вы хотите из-за слишком малого диапазона
random.sample(range(2), 1000)
он бросает:
ValueError: Sample larger than population
Эта функция решает обе проблемы:
import random
def random_sample(count, start, stop, step=1):
def gen_random():
while True:
yield random.randrange(start, stop, step)
def gen_n_unique(source, n):
seen = set()
seenadd = seen.add
for i in (i for i in source() if i not in seen and not seenadd(i)):
yield i
if len(seen) == n:
break
return [i for i in gen_n_unique(gen_random,
min(count, int(abs(stop - start)/abs(step))))]
Использование с очень большими числами:
print('\n'.join(map(str, random_sample(10, 2, 10000000000000000000000000000000))))
результат Пример:
7822019936001013053229712669368
6289033704329783896566642145909
2473484300603494430244265004275
5842266362922067540967510912174
6775107889200427514968714189847
9674137095837778645652621150351
9969632214348349234653730196586
1397846105816635294077965449171
3911263633583030536971422042360
9864578596169364050929858013943
Usage, где диапазон меньше, чем количество запрошенных элементов: результат
print(', '.join(map(str, random_sample(100000, 0, 3))))
Пример:
2, 0, 1
Он также работает с отрицательными диапазонами и шаги:
print(', '.join(map(str, random_sample(10, 10, -10, -2))))
print(', '.join(map(str, random_sample(10, 5, -5, -2))))
Sample результаты:
2, -8, 6, -2, -4, 0, 4, 10, -6, 8
-3, 1, 5, -1, 3
Если они уникальны, то они действительно не случайны. –
@ IgnacioVazquez-Abrams im пытается реализовать метод, который мой профессор назвал «начальной загрузкой», мы делаем некоторые «исследования» в поисковых системах. – iCodeLikeImDrunk
@ IgnacioVazquez-Abrams это они, если они представляют случайные выборки без замены. Это вопрос об общем использовании языка программирования ... мы * используем его для вещей –