2013-07-17 5 views
0

루프에서 함수를 삽입 "오작동",파이썬 : 나는 다음과 같은 코드로 작성

... 
for x in range(len(coeff)): coeff[x].insert(0,names[x]) 
coeff.insert(0,['Center','c1','c2','c3'])  
print_matrix(coeff) 
... 

print_matrix 기능은 단지 튜플 [[ROW1]에서 멋진 행렬을 출력을 [ROW2], [등 ...]]. 내 coeff = [[1,2,3],[4,5,6]] 및 내 names = ['A,'B'].

내가 기능을 처음 실행할 때 내가 얻을 : 정확히 내가 원하는 것입니다

coeff = [['Center','c1','c2','c3'],['A',1,2,3],[B,4,5,6]] 
+----------------------+ 
| Center c1 c2 c3 | 
| A  1 2 3 | 
| B  4 5 6 | 
+----------------------+ 

합니다.

... 
del x 
for x in range(len(basis)): basis[x].insert(0,names[x]) 
basis.insert(0,['Center','A1','A2','A3'])  
print_matrix(basis) 
... 

그때 얻을 :

basis = [['Center','A1','A2','A3'],['A','B',7,8,9],['A','B',10,11,12]] 

및 오류가 나는 첫 번째는 비슷한 방식으로 다른 튜플 basis = [[7,8,9],[10,11,12]]를 인쇄 할 직후 같은 (복사 및 붙여 넣기) 스크립트를 실행할 때 문제가 시작 같은 길이의 행을 가진 튜플을 얻지 못하기 때문에 print_matrix 함수에서 가져옵니다. 왜?

+4

인덱스로 반복하지 마십시오. 느리고 읽기가 어렵고 유연성이 없습니다. (0, 이름 [x])'는 x의 경우 zip (coeff, names)의 이름이됩니다 : x.insert (0, name)''x의 범위 (len (coeff) . 또한 한 줄의 루프를 사용하지 않아야합니다. 코드를 읽기가 더 어렵게 만듭니다. 항상 앞면에 삽입하는 경우 ['collections.deque'] (http://docs.python.org/3.3/library/collections.html?highlight=deque#collections.deque) 및 'deque.appendleft()'와'list.insert()'도 사용합니다. –

+0

@Lattyware 구문 수정을 이용해 주셔서 감사합니다. 지금은 훨씬 깨끗하지만 여전히 작동하지 않습니다. 결과는 내 루프 디자인과 정확히 동일합니다. 나는 지금 deque를 시도 할 것이다. – MarcinKonowalczyk

+0

내가 제안한 것들도 프로그램의 기능을 바꿀 수 없으며, 단순히 자신이하는 일을하는 더 좋은 방법 일뿐입니다. –

답변

0

좋아, 나는 그것을 해결했다. 무슨 일이 있었는지 그 방법은 basis이 주먹 자리에 건설되어 기능에 영향을 주었다. 난 그냥 basis의 예로서 임의의 숫자를하는 듯했으나 실제로는 (깊은 코드)이었다

내가 basis[0]insert(0,something)을했을 때, 그것은 또한 basis[1]에 요소를 삽입하도록
coordinates = [...,[1,2,3],...] 
coordinates[7] = [1,2,3] # Or something like that 
basis = [] 
basis.append(coordinates[7]) 
... 
basis.append(coordinates[7]) 

. here 주어진 방법

... 
basis_clone = [[y for y in basis[x]] for x in range(len(basis))] 
for y, name in zip(basis_clone,orbital_center_names): y.insert(0,name) 
basis_clone.insert(0,['Center','A1','A2','A3']) 
print_matrix(basis_clone) ; sleep(0.1) 
... 

없음 내가했던 방식에 기초를 복제했다 그렇게 일하지 : 여기

작동 코드의 스트립입니다. 나는 그것을하는 더 좋은 방법의 제안을 위해 열려 있습니다.

추신 : 좋은 구문에 대한 도움을 받으려면 @Lattyware에 감사드립니다.

관련 문제