2011-08-09 74 views
1

我需要創建一個嵌套列表,深度爲四級。在第四級,我需要系統地分配值。正如您可以在代碼下面的輸出中看到的那樣,當第四個級別位於第一個循環的中間時,無論賦值如何,我都會收到索引錯誤。在Python中使用for循環分配嵌套列表中的值

fourNest = [ [[[[[AA, BB, CC, DD] 
     for AA in range(2)] 
     for BB in range(3)] 
     for CC in range(4)]  
     for DD in range(5)]] 

    print fourNest #this prints as expected and assignments work manually 


    for AA in range(2): 
     print "AA = ", AA 
     for BB in range(3): 
      print " BB = ", BB 
      for CC in range(4): 
       print "  CC = ", CC 
       for DD in range(5): 


        fourNest[AA][BB][CC][DD] = 1 

        print "   DD = ", DD," ", fourNest[AA][BB][CC][DD] 
 
AA = 0 

BB = 0 

CC = 0 

DD = 0   1 

DD = 1   1 

DD = 2   1
Traceback (most recent call last): 
    File "C:/Python27/forListCreateTest", line 21, in <module> 
    fourNest[AA][BB][CC][DD] = 1 
    IndexError: list assignment index out of range 
+0

1+不錯的益智...(我喜歡gnibbler的回答最好:正如他指出的,你的代碼不是一個,而是兩個錯誤)。另外,如果用簡單的1代替理解中的內部[[AA,BB,CC,DD]],並且擺脫嵌套for循環的最後一組,則將得到相同的最終結果。 (順便說一下,在這種情況下,我希望Python標準庫有一個「autogrowing list」容器類,與collections.defaultdict類似;然後,與itertools.product一起,可以用兩行代碼) – kjo

回答

1

LC中環路的順序需要顛倒。你也有多餘的括號內的一個水平有

fourNest = [[[[[AA, BB, CC, DD] 
     for DD in range(5)] 
     for CC in range(4)]  
     for BB in range(3)] 
     for AA in range(2)] 
+0

你每個人都爲你的答案和評論,而且這麼快!這是我第一篇文章,這是一個很棒的網站! – Luke

+0

@盧克,你是最受歡迎的 –

0
>>> fourNest[0][0][0][0] 
[[0, 0, 0, 0], [1, 0, 0, 0]] 
>>> fourNest[0][0][0] 
[[[0, 0, 0, 0], [1, 0, 0, 0]], [[0, 1, 0, 0], [1, 1, 0, 0]], [[0, 2, 0, 0], [1, 2, 0, 0]]] 
... 

所以最裏面的列表(不考慮所產生的4號)有兩個元素,接下來的外輪3等..

您嘗試使用它就像它是相反的...