2014-10-20 77 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