可以先构造一个字典,显示了可能的下一个元素:
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