2010-12-29 43 views
8

Hi Tôi đang làm việc này cho một dự án trường học (vì vậy tôi không thể sử dụng bất kỳ tính năng nâng cao nào) và tôi đang sử dụng Python 2.6.6.Trình tự ngẫu nhiên của Python với hạt giống

Tôi có một danh sách các số 1-1000 và hạt giống của tôi sẽ được, cho phép nói, 448.

Làm thế nào tôi có thể tạo ra một chuỗi ngẫu nhiên với hạt giống đó để các con số trong danh sách của tôi sẽ được ở một chỉ mục khác nhau?

Và có thể, biết hạt giống, trả về các phần tử trong danh sách của tôi đến vị trí ban đầu?

Xin lỗi nếu nó gây nhầm lẫn nhưng tiếng Anh không phải là ngôn ngữ mẹ đẻ của tôi.

Cảm ơn,

Favolas

+1

http://docs.python.org/release/2.6.6/library/random.html sẽ cho bạn biết mọi thứ bạn cần biết –

+0

@Rafe Tôi đã đọc điều đó trước nhưng không hiểu – Favolas

Trả lời

24
import random 
SEED = 448 

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

print myList 

kết quả trong

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

Danh sách của bạn hiện đang pseudorandomized.

'Giả' là quan trọng, bởi vì tất cả các danh sách có cùng một hạt giống và số lượng mục sẽ trả về theo cùng một thứ tự 'ngẫu nhiên'. Chúng tôi có thể sử dụng điều này để bỏ trộn danh sách của bạn; nếu nó thật sự ngẫu nhiên, điều này là không thể.

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 

kết quả trong

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

Tada! originalList bây giờ là thứ tự ban đầu của myList.

+0

cảm ơn Hugh. Điều đó đã giải quyết được câu hỏi của tôi – Favolas

1

Một kiểm tra đơn giản trên các tài liệu python http://docs.python.org/library/random.html nói với bạn về

random.seed([x]) 

mà bạn có thể sử dụng để khởi tạo giống.

Để nhận lại các mục theo thứ tự ban đầu của bạn, hãy đặt lại hạt giống và nhận lại các số ngẫu nhiên. Sau đó bạn có thể sử dụng chỉ mục này để lấy nội dung trong danh sách hoặc chỉ sử dụng chỉ mục cho bất kỳ thứ gì.

Bạn chỉ cần sắp xếp danh sách và sắp xếp lại thứ tự sắp xếp.

+0

Tôi đã đọc điều đó trước nhưng không hiểu. Tôi đã làm random.seed (448) và nó không cho tôi gì cả. Làm thế nào tôi có thể sử dụng danh sách này whitm của tôi? – Favolas

+0

Bạn đặt hạt giống với hàm hạt giống đó. Sau đó, bạn gọi một phương thức khác trong mô-đun đó để nhận số ngẫu nhiên tiếp theo của bạn. – Kissaki

Các vấn đề liên quan