太多静态嵌套的块python

时间:2014-10-20 16:33:42

标签: python list nested-loops

我尝试将超过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

如何将每个列表写入文本文件中的列? e.g。

 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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

"静态嵌套的块太多",当嵌套块超过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度。