ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 36.8 연습문제: 리스트에 기능 추가하기
    코딩도장 심사문제모음 2020. 11. 11. 00:26
    728x90

    다음 소스 코드에서 리스트(list)에 replace 메서드를 추가한 AdvancedList 클래스를 작성하세요. AdvancedList list를 상속받아서 만들고, replace 메서드는 리스트에서 특정 값으로 된 요소를 찾아서 다른 값으로 바꾸도록 만드세요.

     

    풀이.1

    class AdvancedList(list):
        def replace (self, num1, num2): # self 는 x라는 인스턴스 자기 자신이다.
            for i in range(len(self)): 
                if self[i] == num1 :
                    self[i] = num2
                    
    x = AdvancedList([1, 2, 3, 1, 2, 3, 1, 2, 3])
    x.replace(1, 100)
    print(x)
    
    # [100, 2, 3, 100, 2, 3, 100, 2, 3]
    print(type(x))
    # <class '__main__.AdvancedList'> ## repalce는 문자열 메서드라는 점을 잊지말자

    먼저 list를 상속받는 파생 클래스 AdvancedList를 만들고 이안에 메서드 reppalce 를 만들어준다.

    먼저 메서드 생성할 경우 첫번째 매개변수는 self로 받고, 

    x.repalce(1, 100) 과 같이 두가지 인수를 받아 함수를 실행시킨다. num1, num2

    여기서는 for 반복문을 사용하였으며, 인덱스로 접근하여 해당 인덱스의 값이 num1 과 같을 경우 해당 인덱스 자리를 num2로 재할당한다.

    추가로, if else 구문으로 끝을 맺지 않아도 된다는점과 repalce는 문자열 메서드라는 점을 잊지말자

    ### 여기서 self는 인스턴스 자기 자신이라는 의미이다.

    함수를 정의할 경우 x = AdvancedList([1, 2, 3....])처럼 인스턴스를 생성하여

    해당 인스턴스를 이용해 클래스의 메서드를 호출하게된다.

    일반적으로 def로 정의하지 않는 경우 반복문이나 조건문을 실행할때 사용되는 어떠한 기준이되는 객체가 존재한다.

    x = [1, 2, 3]

    for i in x: , if x[0] != 0: 처럼 말이다.

    하지만 def로 새로 함수를 생성할때는 이 x 값을 이용해 반복 , 조건 등에 코드에 접근해야하는데 이때 사용하는것이 self이다.

    self의 의미는 따로 self에 대해서만 다뤄보겠지만, 여기서는 self는 인스턴스 자기자신을 의미하며

    파이썬은 클래스의 메소드를 정의할 때 self를 명시한다. 메소드를 불러올 때 self는 자동으로 전달된다. 

    풀이.2 (코딩도장)

    class AdvancedList(list):
        def replace (self, num1, num2): # self는 인스턴스 자기자신 여기서는 x 
            while self.count(num1) != 0 :
                self[self.index(num1)] = num2
    
    
    x = AdvancedList([1, 2, 3, 1, 2, 3, 1, 2, 3])
    x.replace(1, 100)
    print(x)
    
    # [100, 2, 3, 100, 2, 3, 100, 2, 3]

    코딩도장처럼 while을 이용해 작성해보았다

    첫 번째는 count라는 문자열 메서드를 이용해 self 안에 num1이 있다면 count 결과로 숫자 0이 나오지 않을것이다.

    이를 이용해 while의 종료 조건을 만들어준다

    함께 index() 메서드를 이용해 해당 값의 인덱스 번호를 반환해주는 방법을 이용하여

    num1의 인덱스 번호를 찾아 값을 num2로 변경해준다.

    여기서 while 반복문은 self에서 1이라는 값이 없어질때까지 반복한다.

    [100, 2, 3, 1, 2, 3, 1, 2, 3] //  [100, 2, 3, 100, 2, 3, 1, 2, 3] // [100, 2, 3, 100, 2, 3, 100, 2, 3]

        def replace(self, old, new):
            while old in self:
                self[self.index(old)] = new

    두 번째 찾고자 하는 값이 self안에 있는지 여부에 대해 검사하는 in 연산자를 이용하였다.

    self에 old라는 값 "1" 이 없어질때까지 반복하는 구조이다.

    인덱스 번호로 접근하는 건 동일하다.

    728x90
Designed by Tistory.