2014-10-20 75 views
2

我想写超过21个列表包含相同数量的项目文本文件中的列。太多的静态嵌套块python

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 
+0

程度的嵌套究竟什么是你的目标?我不确定你用上面的代码得到什么。 – CoryKramer 2014-10-20 16:36:04

+3

你在做什么? '随机(10:1)'?你应该看看['itertools.product'](https://docs.python.org/2/library/itertools.html#itertools.product)(也许在你去那里时阅读'random'文档...) – jonrsharpe 2014-10-20 16:36:09

+0

您有问题吗? – 2014-10-20 16:36:21

回答

3

使用zip,这除了避免错误将打印一行每组的值,而不是一个组线在封闭循环的每个值。

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

这只是多次打印每个列表... – user3725599 2014-10-20 17:19:04

+0

如果'a','b',...,'q'每个都有10个项目,这将打印10行,第一行包含每个的第一项列表等 – chepner 2014-10-20 17:24:31

1

“太多的静态嵌套块”,当你组块超过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 

此代码减少了的3