2012-02-15 3 views
0

이 질문은 이전에 답변을 받았지만 답변을 받았지만 반복 호출 후 데이터 손실을 피하기 위해 내 방법을 조정하는 데 문제가 있습니다.데이터 손실 호출 방법 반복

내 방법

[['ACCOUNT', 'VALUE1', 'VALUE2'], 
['Account1', '3.43', '2.5'], 
['Account2', '1,235.67', '8.98']] 

self.accounts 제가

'무엇 return [item[0] for item in self.container

의해 정의된다 :

def getColumn(self, name): 
    index_num = self.headers.index(str(name)) 
    columns = [item[index_num] for item in self.container] 
    acco = self.accounts 
    del acco[0] 
    del columns[0] 
    columns = [item.replace(',', '') for item in columns] 
    return dict(zip(acco, columns)) 

self.container는 다음 형태를 갖는 헤더를 갖는 배열 내가하려고하는 것은 머리글 이름 중 하나와 일치하는 문자열을 전달하여 사전에 계정과 값을 압축하는 것입니다. 이 메서드는 헤더에서 인덱스를 조회 한 다음 값 열을 제거하고 헤더를 삭제하려고 시도합니다.

이 메서드를 호출 할 때마다 각 호출마다 길이가 1 씩 감소하는 사전이 생성됩니다. 'VALUE1'을 (를) 전달하면 길이는 26입니다. 'VALUE2'를 전달하면 그 길이는 25입니다.

누구나 메서드 호출에 대한 데이터 손실없이이 작업을 수행 할 수있는 방법을 제안 할 수 있습니까?

+0

'VALUE1', 'VALUE2'를 통과 한 다음 'VALUE1'을 다시하면 어떻게됩니까? –

+0

이를 수행하는 방법은 여러 가지가 있습니다. 예를 들어 다음 변수의 인덱스를 나타내는 상태 변수 (예 : self.next)는 유지하십시오. 그러나 이것은 매우 나쁜 수업 디자인처럼 보입니다. 수업을 준비하는 더 좋은 방법이 없다고 확신합니까? –

+0

계속해서 가치를 상실합니다. 'VALUE1'을 다시 전달하면 길이가 24로 줄어 듭니다. – donopj2

답변

0

self.accounts 속성이 실제로 구현 된 방법을 확인해야하지만 내장형에 문제가있는 것이 거의 확실합니다. 매우 간단한 이유가 있는데, 특히 간단한 것인데, 을 사용하고 특히 변경 가능한 유형 (즉, 목록)을 사용하면 몇 가지 매우 이상한 행동으로 이어질 수 있습니다. 효과적으로을하고 어떤

acco = self.accounts 
del acco[0] 

: 나는 당신의 문제가이 두 줄에 있다고 추측하고있어

del self.accounts[0] 

당신이 그것을 해결되는 찾을 수 있습니다 :

acco = self.accounts[:] # makes a shallow copy of self.accounts 
del acco[0] 

가장 쉬운 디버깅하는 방법은 self.accounts 개체 자체의 길이를 보여주는 print 문을 위아래로 배치하는 것입니다.

여전히 을 사용하지 말고 list.pop 메서드를 사용하는 것이 좋습니다. 그리고 중요한 것은 스프레드 시트 데이터를 모델링하는 "목록의 목록"방식이 실제로 그렇게 효율적이지 않기 때문에 self.container를 사전으로 다시 구현하는 것입니다.

+0

그랬습니다. 조언을 감사하십시오. – donopj2