【问题标题】:too many statically nested blocks python太多的静态嵌套块python
【发布时间】:2014-10-20 16:33:41
【问题描述】:

我正在尝试将超过 21 个包含相同数量项目的列表写入文本文件中的列。

import random

a=[]
b=[]
....
q=[]


for i in range(200):
    a.append(random.gauss(10,0.1))
    b.append(random(20,0.5))
    ....
    q.append(random.gauss(50,0.2)

for aVal in a:
    for bVal in b:
        ....
        for qVal in q:
            print(aVal, "\t ", bVal, ", ", .... , qVal)

....

SystemError: too many statically nested blocks

如何将每个列表写入文本文件中的列?例如

 0.892550 0.872493 0.206032 2.528080
 0.722350 0.303438 0.176304 2.436103
 0.875931 0.717765 0.144785 2.583095
 0.890831 0.411748 0.124370 2.540974
 0.764183 0.728080 0.128309 2.506590
 0.831232 0.545845 0.130100 2.517765
 0.754441 0.826074 0.208539 2.604585
 0.707450 0.367049 0.198868 2.503152
 0.736103 0.554441 0.097865 2.563324
 0.792837 0.808883 0.179527 2.526361
 0.719484 0.690258 0.215344 2.643266
 0.788252 0.824355 0.189198 2.455874

【问题讨论】:

  • 您的目标到底是什么?我不确定你用上面的代码得到了什么。
  • 你想做什么,例如random(10:1)?你应该看看itertools.product(也许在你在那里的时候阅读random文档......)
  • 您有问题吗?
  • 一段 Python 代码中可以包含的嵌套块的数量是有限制的。达到该限制应该告诉您代码有问题!
  • 编辑有帮助吗>?

标签: python list nested-loops


【解决方案1】:

“too many staticly nested blocks”,当你嵌套超过20个块时会遇到这个错误。

这是python解释器的设计决定,将其限制为20。 Python 使用称为 blockstack 的特殊堆栈来执行代码块,例如异常和循环。此堆栈大小限制为 20。

不过,可以在您的上下文中使用以下代码。

lst1 = [1, 11, 111]
lst2 = [2, 22, 222]
lst3 = [3, 33, 333]
lst4 = [4, 44, 444]
lst5 = [5, 55, 555]
lst6 = [6, 66, 666]


def lamlist(l1, l2, l3):
    funs = []
    for i in l1: 
        for j in l2: 
            for k in l3: 
                x = lambda i=i, j=j, k=k: (i,j,k)
                funs.append(x)
    return funs

#def lamlist(l1, l2, l3):
#    return [lambda i=i, j=j, k=k: (i, j, k) for i in l1 for j in l2 for k in l3] 


funlist = [lamlist(lst1, lst2, lst3), lamlist(lst4, lst5, lst6)]

for f1 in funlist[0]:
    a, b, c = f1()
    for f2 in funlist[1]:
        d, e, f = f2()
        print a, b, c, d, e, f

此代码将您的嵌套减少了 3 级。

【讨论】:

    【解决方案2】:

    使用zip,除了避免错误之外,它还会为每组值打印一行,而不是为封闭循环中的每个值打印一组行。

    for aVal, bVal, ..., qVal in zip(a, b, ..., q):
        print(aVal, "\t ", bval, ", ", ..., qval)
    

    【讨论】:

    • 如果a, b, ..., q 各有 10 项,这将打印 10 行,第一行包含每个列表的第一项等。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-11
    • 1970-01-01
    • 2019-10-20
    相关资源
    最近更新 更多