присвоение значений во вложенном списке с использованием циклов for в python - PullRequest
1 голос
/ 10 августа 2011

Мне нужно создать вложенный список глубиной четыре уровня. На четвертом уровне мне нужно систематически присваивать значения. Я получаю ошибку индекса, независимо от присвоенного значения, когда четвертый уровень находится в середине своего первого цикла, как вы можете видеть в выходных данных ниже кода.

    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

Ответы [ 2 ]

1 голос
/ 10 августа 2011

Порядок петель в 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 голосов
/ 10 августа 2011
>>> 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 и т. Д.

Вы пытаетесь использовать его, как если бы это было наоборот ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...