2014-06-26 64 views
0

我在列表列表中有以下數據。這是一個用於核反應堆的燃料束(具有半對稱性),每個數字代表一個燃料銷(具有不同的濃縮物)。數字越高燃料越多。我試圖生成大量的輸入文件來運行(我已經有功能,將我的數組輸入到我的輸入文件並運行它)。 這僅僅是一個什麼樣一個陣列會是什麼樣子如何在python中生成列表的排列列表

20 
30 60 
50 80 80 
60 80 80 80 
60 81 80 80 80 
60 80 80 00 00 80 
60 80 80 00 00 80 80 
50 80 80 80 80 80 80 80 
40 70 80 81 80 80 80 80 80 
20 40 60 70 80 80 70 71 50 30 

所以我將使用規則,以列出樣本。像邊緣的針腳必須是低濃縮的,不能被10整除的針腳不能在邊緣或面對面相鄰,或面對00相鄰。由於每個點有90個選項,我需要限制了所有的可能性。這就是爲什麼我想爲數組中的每個位置生成一個選項列表,然後生成每個可能的數組。我知道如何實現我所有的規則,我只是對構建所有可能的數組組合感到困惑。

我該如何去爲我的數組生成每種可能的組合?或者如果有更好的方法來完成我想要做的事情。我的Python體驗只有兩週的價值。

+1

我沒有看到你的數字三角形應該是什麼。 [10,20,30]從哪裏來?我沒有看到你的列表中的任何一行。 – CoryKramer

+2

你能舉出一個你想要完成的更明確的例子嗎?你的措辭不清楚。 –

+0

我想我們現在都在想像它的方式是'list [0] [0]'會訪問'20'。 '20'與'[10,20,30]'相關嗎? – ZWiki

回答

2

如果我理解你,使用itertools模塊中的工具相對比較簡單。像

from itertools import product, chain 

def choose_from_2d_lol(lol): 
    flattened_options = list(chain.from_iterable(lol)) 
    for p in product(*flattened_options): 
     p_iter = iter(p) 
     new_list = [[next(p_iter) for elem in row] for row in lol] 
     yield new_list 

事情會遍歷所有的可能性:

>>> xx = [[[10,20,30]],[[44], [55,66]]] 
>>> for chosen in choose_from_2d_lol(xx): 
...  print(chosen) 
...  
[[10], [44, 55]] 
[[10], [44, 66]] 
[[20], [44, 55]] 
[[20], [44, 66]] 
[[30], [44, 55]] 
[[30], [44, 66]] 

注意,雖然,通過各種可能性會這種方式很可能是完全不可行的可能性的數量將迅速增長。

+0

對不起,你能解釋你到底在做什麼 'flattened_options = list(chain.from_iterable(lol) )' – Greg

+0

@Greg:在該行後面加上'print(flattened_options)'來查看。基本上它需要列表列表'lol'並將它變成一個平面列表,所以在這裏它將'xx'變成'[[10,20,30],[44],[55,66]]'。 – DSM

+0

'from_iterable'是否有函數,或者它只是您使用的通用名稱?我可以看到這是我想要的,我只是想了解它,所以它不僅僅是一個黑盒子,而是我想要的。 – Greg