Как мне реализовать функцию, подобную random.choice (), которая возвращает воспроизводимые результаты? - PullRequest
2 голосов
/ 29 августа 2011

Я хотел бы передать фиксированное начальное число (строку) в функцию, а затем сделать так, чтобы он случайно выбрал один элемент из списка. Тем не менее, это должен быть тот же элемент из того же списка, если он использовал то же семя! Очевидно, что это вовсе не случайно, но оно должно более или менее казаться случайным и примерно одинаково распределенным. Это тоже должно быть довольно быстро.

Чтобы продемонстрировать, как это работает случайным образом.

>>> random.seed('Python')
>>> random.choice([1,2,3,4,5,6,7,8,9,0])
3
>>> random.choice([1,2,3,4,5,6,7,8,9,0])
6
>>> random.choice([1,2,3,4,5,6,7,8,9,0])
2

То, что я хотел бы, это.

>>> notrandom([1,2,3,4,5,6,7,8,9,0],seed='Python')
4
>>> notrandom([1,2,3,4,5,6,7,8,9,0],seed='Python')
4
>>> notrandom([1,2,3,4,5,6,7,8,9,0],seed='Python')
4

Воспроизводить нужно только в том случае, если один и тот же список используется с той же исходной строкой.

Ответы [ 2 ]

3 голосов
/ 29 августа 2011

Начиная с документ Python для случайных , я думаю, это то, что вы ищете:

Функции, предоставляемые этим модулем, на самом деле являются связанными методами скрытого экземпляр класса random.Random. Вы можете создавать свои собственные экземпляры Случайного, чтобы получить генераторы, которые не разделяют состояние.

Как,

> r = random.Random()

> r.seed('Hi')
> r.random()
0.3787897089299177

> r.seed('Hi')
> r.random()
0.3787897089299177
0 голосов
/ 29 августа 2011

В первый раз выберите случайное число из списка, затем хешируйте начальное число и сохраните пару в массиве.

Впоследствии, Hash seed и используйте его в качестве ключа в вашем массиве.

Это, очевидно, дурацкое решение, но я думаю, что здесь это может сработать.видел, что это для того же списка ввода тоже.Так что хешируйте список и сохраняйте этот хеш.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...