Python中静态嵌套块过多

5
我想在文本文件中写入超过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

你的目标是什么?我不确定你在上面的代码中想表达什么。 - Cory Kramer
3
您尝试使用例如 random(10:1) 做什么?您应该查看 itertools.product(也许在那里阅读random文档...)。 - jonrsharpe
你有问题吗? - John Bollinger
1
在Python代码中,您可以嵌套的块数是有限制的。如果达到了这个限制,那么就说明代码出现了问题! - Ricardo Cárdenes
编辑有帮助吗? - Josh J
所有相关问题:1. https://stackoverflow.com/q/59803109/ 2. https://dev59.com/VlcP5IYBdhLWcg3wAmEE/ - Milan
2个回答

4

“太多的静态嵌套块”,当您嵌套超过20个块时,您将遇到此错误。

这是Python解释器的设计决策,限制最多只能嵌套20个块。Python使用一个名为块堆栈的特殊堆栈来执行代码块,例如异常和循环。该堆栈大小被限制为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

这段代码将嵌套程度降低了三级。

2
使用zip,除了避免错误外,它会为每组值打印一行,而不是在封闭循环中为每个值打印一组行。
for aVal, bVal, ..., qVal in zip(a, b, ..., q):
    print(aVal, "\t ", bval, ", ", ..., qval)

1
如果ab,...,q每个都有10个项目,则会打印10行,第一行包含每个列表的第一个项目,依此类推。 - chepner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接