>source

루프없이 재귀를 사용하고 메소드 또는 함수를 빌드하여 파이썬으로 코드를 작성하는 방법은 무엇입니까? 나는 시도했다 :

def myRemove(x, cont): # x is a string inside of the list cont
    if x == cont:
        return None
    elif len(x) > len(cont):
        return None
    else:
        if "x" not in cont[0]:
            return myRemove(x,cont[1:])
        else:
            return cont


  • 답변 # 1

    def recursive_remove(x: str, cont: list):
        """ removes items equal to x using recursion only
            cont: list of strings
            x: string to remove from list
        """
        if len(cont) == 0:
            return []
        if cont[0] != x:
            return [cont[0]] + recursive_remove(x=x, cont=cont[1:])
        else:
            return recursive_remove(x=x, cont=cont[1:])
    
    list_without_banana = recursive_remove(x='banana', cont=['apple', 'banana', 'strawberry', 'peanut'])
    print(list_without_banana)
    >>>['apple', 'strawberry', 'peanut']
    
    

  • 답변 # 2

    코드에서 볼 수있는 몇 가지 문제 :

    1. 문자열과 변수의 차이점

    코드에 의미 상 잘못된 다음 줄이 있습니다 :

    if "x" not in cont[0]:
        ...
    
    

    여기 "x"   x 값이 아닌 문자열 'x'입니다. . 이 문제를 해결하려면 따옴표를 제거하십시오.

    if x not in cont[0]:
        ...
    
    
    2. 목록과 변수의 차이점

    변수가 목록에 있는지 확인하려면 in 를 사용하십시오. . 예 :

    >>> "test" in ["test", "wow", "u"]
    true
    
    

    변수가 다른 변수와 같은지 확인하려면 == 를 사용하십시오. . 예 :

    >>> "test" == ["test", "wow", "u"][0]
    true
    
    

    코드의 고정 부분 : ( cont[0] 때문에  목록이 아닌 값을 반환합니다)

    if x == cont[0]:
        ...
    
    
    3. 재귀로 반환

    반환 된 목록을 다른 목록보다 먼저 목록 부분과 연결해야합니다. 그렇지 않으면 항상 목록의 마지막 부분을 반환하는 것입니다.

    하나의 가능한 솔루션
    def remove(string, string_list):
        if string_list[0] == string:
            return string_list[1:]
        else:
            return string_list[:1] + remove(string_list[1:], string)
    
    

관련 자료

  • 이전 swift - 설정할 영역 객체를 추가하는 방법
  • 다음 ios - 탐색 모음 색상이 올바르게 설정되지 않았습니다