2014-01-23 68 views
1

我有3個表是這樣的:Python的算法來依次產生老虎機的所有可能結果

reel1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 

reel2 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 

reel3 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 

我需要一個發生器功能可以連續給我這些:

首頁輸出:

[ 
    [1,2,3] 
    [1,2,3] 
    [1,2,3] 
] 

第二輸出:

[ 
    [1,2,3] 
    [1,2,3] 
    [2,3,4] # Sequentially go through the list 
] 

...

第九輸出:

[ 
    [1,2,3] 
    [2,3,4] # Next block of 3 of the second list 
    [1,2,3] 
] 

一路:

[ 
    [8,9,10] # Last block of 3 of the first list 
    [8,9,10] # Last block of 3 of the second list 
    [8,9,10] # Last block of 3 of the third list 
] 

什麼是有效的算法來實現上述?

我目前的方法:我使用3 循環順序遍歷所有3個列表,但我不認爲它是有效的。另外,如果我有三個以上的列表,我將不得不縮減很多。

感謝您的幫助!

回答

3
>>> from itertools import product 
>>> reel = list(range(1, 11)) 
>>> for i in product(zip(reel, reel[1:], reel[2:]), repeat=3): 
...  print(i) 

爲了處理意見所環繞,您可以使用

>>> for i in product(zip(*(reel[j:]+reel[:j] for j in range(3))), repeat=3): 
...  print(i) 
+0

我覺得這是失蹤的迴轉情況下'(9,10,1)'和'( 10,1,2)'(雖然沒有在這個問題問) –

+0

的OP似乎並不希望出現這種情況。 –

+0

同意它不要求明確,但OP說,它是一個老虎機的卷軸,似乎是合理的結論 –

0
for i in itertools.product([[1,2,3,4,5,6,7,8,9,10][i:i+3] for i in range(0,8)], repeat=3): 
    print(i)