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

+3

예를 들어 무엇을하려는 것입니까? '무작위 (10 : 1)'? 당신은 ['itertools.product'] (https://docs.python.org/2/library/itertools.html#itertools.product)을보아야합니다. (그리고 아마 거기에있는 동안'random'docs를 읽을 수도 있습니다. ...) – jonrsharpe

+0

질문이 있으십니까? –

답변

3

따로 에러 회피로부터 바깥 루프의 각 값에 대해, 값의 그룹 당 라인 한 세트가 하나 개의 라인을 사용하지 출력한다 zip. 중첩 블록 이상 20

이것은 20 파이썬을 제한하는 파이썬 인터프리터의 디자인 결정이있을 때이 오류가 발생합니다

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

이것은 각 목록을 여러 번 출력합니다 ... – user3725599

+0

'a','b', ...,'q'가 각각 10 개의 항목을 가지고 있다면, 첫 줄에 각 줄의 첫번째 항목이 들어있는 10 줄을 출력합니다 목록 등 – chepner

1

"너무 많은 정적 중첩 블록", 사용하는 블록 스택이라고하는 특수 스택은 예외 및 루프와 같은 코드 블록을 실행합니다. 이 스택 크기는 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.

관련 문제