2017-12-09 31 views
0

아래의 여분의 줄을 사용하지 않고 디버깅하는 동안 self. {name}을 (를) 모니터 할 수있는 방법이 있습니까? 또한 누군가 자기 자신을 생략하는 방법을 잘 알고 있습니다. 코드의 일부분 (다른 메소드 본문의 4 번째 줄 이후)은 더 읽기 쉽도록 만들 것입니다.python IDLE 디버거 자체 변수

class QuickFindUf(object): 

    def __init__(self, n): 
     self._id = [] 

     for i in xrange(n): 
      self._id.append(i) 

    def connected(self, p, q): 
     return self._id[p] == self._id[q] 

    def union(self, p, q): 
     pid = self._id[p] 
     qid = self._id[q] 

     l = self._id # debug only 

     for i in xrange(len(self._id)): 
      if self._id[i] == pid: 
       self._id[i] = qid 
+0

Ob jects에는 이름이 없으며 참조 만 있습니다. 게다가 파이썬은 스스로를 지정해야한다. – Ssein

+0

고마워, 자기 부분은 분명하다. 문제는 4 행 다음에 몇 가지 해결 방법이있다. 어쨌든 좋은 점, qn에 설명을 추가했습니다. –

답변

1

이후 필요에 따라 n 개를 저장하십시오. 제가보기 __init__ 세트 ((N)의리스트 (3.X의 범위 (10)) 범위 self._id, 그래서 나머지는 응축 될 수있다.

def __init__(self, n): 
    self.n = n 
    self._id = range(n) # list(range(n)) in 3.x. 

어떤 경우에, 올려 l = self._id와 여기에 직접 존경, 리터를 사용하는 등의 방법에 단 한 번 자기의 속성은, 그 후, 표준 관행이 아닌 해결 방법이나 디버그 전용 일 다음과 같이 나는 노동 조합을 작성합니다.

def union(self, p, q): 
    l = self._id 
    pid = l[p] 
    qid = l[q] 
    for i in xrange(n): 
     if l[i] == pid: 
      l[i] = qid 

p 또는 q가 범위를 벗어난 경우 수행 할 작업을 고려할 수 있습니다. 다른 질문이 있으십니까?

+0

고마워, 테리. self._id에 대한 로컬 이름이 좋습니다. 범위에 관해서는, 목록을 한 번만 생성하기 때문에 xrange가 필요 없다는 것을 의미합니까? xrange가 Python 3.x의 기본 구현 인 어딘가 읽었습니다. –

+0

P.S. 알았어. 3.x에서 상응하는 것이 단지 분노이고리스트 생성자를 사용한다는 것을 의미한다. 가중 버전의 모든 색인에 대해 값이 1 인 다른 목록이 필요하므로 for 루프를 고수 할 수 있습니다. –

+1

1, '3 * [1] == [1, 1, 1]'등의 목록을 보려면 –