【问题标题】:assigning values in a nested list using for loops in python使用python中的for循环在嵌套列表中赋值
【发布时间】:2011-08-09 22:28:40
【问题描述】:

我需要创建一个嵌套列表,深度为四级。在第四层,我需要系统地分配值。当第四级处于其第一个循环的中间时,无论分配的值如何,都会出现索引错误,正如您在代码下方的输出中看到的那样。

    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 抄送 = 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

【问题讨论】:

  • 1+ 不错的谜题...(我最喜欢 gnibbler 的回答:正如他所指出的,您的代码不是一个错误,而是两个错误)。此外,FWIW,如果您将理解中的内部 [AA, BB, CC, DD] 简单地替换为 1,您将获得相同的最终结果,并摆脱最后一组嵌套 for 循环。 (顺便说一句,在这种情况下,我希望 Python 标准库有一个“自动增长列表”容器类,在本质上类似于 collections.defaultdict;然后,与 itertools.product 一起,可以在两行中编写代码。)跨度>

标签: python list for-loop nested variable-assignment


【解决方案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)]

【讨论】:

  • 谢谢大家的回答和cmets,这么快!这是我在这里的第一篇文章,多么棒的网站!
【解决方案2】:
>>> 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 等等..

你试着像反过来一样使用它......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-17
    • 2013-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-26
    相关资源
    最近更新 更多