最初可能次の要素を示し辞書構築することができる:これは、前の数字は(1,1)
ある所与、その後、次の要素が(3,4)
(SO 3または4)のいずれかであることを意味する
nexts = {
(1,1):(3,4),
(3,4):(1,2),
# ...
}
を。次に、シーケンスを生成することができます。あなたが最初の数字について何も指定しなかったので、私はこれらがランダムと仮定します。あなたは構築することができます:
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個の要素を生成し、リストにそれらを配置する必要があります。 1はでこれを行う場合は
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
1を取得:あなたがこれを行うことができ、ここで
>>> 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 ollowed by 1
。もちろん、これは動作することを示す小さな例です。 next
の制約のため、このリストは最終的には最終的に崩壊するでしょう。...,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