2010-12-29 5 views
8

Привет Я делаю это для школьного проекта (поэтому я не могу использовать какие-либо дополнительные функции), и я использую Python 2.6.6.Случайная последовательность Python с семенем

У меня есть список чисел от 1 до 1000, и мое семя будет, позволяет сказать, 448.

Как я могу генерировать случайную последовательность с этим семенем так, чтобы цифры в моем списке будет в другой индекс?

И возможно ли, зная семя, вернуть элементы в моем списке в исходное положение?

Извините, если это смущает, но английский не является моим родным языком.

Спасибо,

Favolas

+1

http://docs.python.org/release/2.6.6/library/random.html расскажет вам все, что вам нужно знать –

+0

@Rafe Я читал это раньше, но не понял – Favolas

ответ

24
import random 
SEED = 448 

myList = [ 'list', 'elements', 'go', 'here' ] 
random.seed(SEED) 
random.shuffle(myList) 

print myList 

приводит

['here', 'go', 'list', 'elements'] 

Ваш список теперь pseudorandomized.

«Псевдо» важно, потому что все списки, имеющие одинаковое количество семян и количество предметов, возвращаются в том же «случайном» порядке. Мы можем использовать это, чтобы не перетасовать ваш список; если бы это было действительно случайным, это было бы невозможно.

Order = list(range(len(myList))) 
# Order is a list having the same number of items as myList, 
# where each position's value equals its index 

random.seed(SEED) 
random.shuffle(Order) 
# Order is now shuffled in the same order as myList; 
# so each position's value equals its original index 

originalList = [0]*len(myList) # empty list, but the right length 
for index,originalIndex in enumerate(Order): 
    originalList[originalIndex] = myList[index] 
    # copy each item back to its original index 

print originalList 

приводит

['list', 'elements', 'go', 'here'] 

Тада! originalList теперь является первоначальным заказом myList.

+0

благодарит Хью. Это решило мой вопрос – Favolas

1

Простая проверка на питона документы http://docs.python.org/library/random.html говорит вам о

random.seed([x]) 

, которые вы можете использовать, чтобы инициализировать семя.

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

Вы просто отсортировали список, и он будет отсортирован в порядке.

+0

У меня есть прочитал это раньше, но не понял. Я сделал random.seed (448), и это ничего не дает. Как я могу использовать этот список whitm my? – Favolas

+0

Вы устанавливаете семя с помощью этой функции семени. Затем вы вызываете другой метод в этом модуле, чтобы получить следующее случайное число. – Kissaki

Смежные вопросы