可以先構造一個字典,顯示了可能的下一個元素:
nexts = {
(1,1):(3,4),
(3,4):(1,2),
# ...
}
因此,這意味着給定的先前的數字是(1,1)
,然後下一個元素是(3,4)
一個(SO 3或4)。接下來我們可以生成一個序列。既然你沒有指定任何關於第一個數字的事情,我會假設這些是隨機。您可以構建:
from random import choice
def second_order_random(k,next_dic):
n0 = choice(range(1,k+1))
yield n0
n1 = choice(range(1,k+1))
yield n1
while True:
(n0,n1) = (n1,choice(next_dic[(n0,n1)]))
yield n1
這是一個無限發生器將根據您nexts
規格產量構成因素。另一方面,k
指定數字的範圍(此處爲k=4
)。所以,當你調用second_order_random(4,nexts)
,您可以生成形式的序列:
3,4,2,...
1,1,4,...
1,1,3,...
3,4,1,...
現在你只需要生成從發電機120元,並把它們在列表中。你可以這樣做:
from iteratools import islice
result = list(islice(second_order_random(4,nexts),120))
如果一個做到這一點有:
nexts = {(1,1):(2,),(1,2):(1,2),(2,1):(1,),(2,2):(1,)}
k = 2
一個實例都有:
>>> list(islice(second_order_random(k,nexts),10))
[1, 1, 2, 2, 1, 1, 2, 2, 1, 1]
所以nexts
這裏指定(1,1)
總是跟着一個2
,該(1,2)
可以跟隨任何數字,並且(2,1)
和(2,2)
總是f被1
貶低。這當然是一個小例子來證明它的工作原理。由於next
限制,這名單總是崩潰最終TOT ...,1,1,2,2,1,1,2,2,1,1,2,2,...
是否先前元素的順序關係:說序列'[...,4,3,...]'是唯一的可能性仍然1和2. –
有什麼和Python有關的,我們可以幫忙嗎?現在這不是一個規格問題。 – DSM
@Willem Van Onsem:是的,訂單很重要。例如。[...,4,3,...]只有3和4. [... 3,4,...]只有1和2. – SDahm