TEAMLAB-Lecture / python-101-for-data-science-by-pknu

1 stars 14 forks source link

gowithflow의 number_of_case 질문 드립니다. #27

Open kim-irubi opened 2 years ago

kim-irubi commented 2 years ago
for i in range(1, len(result)):
    if result[i-1] == result[i]:
        result.remove(result[i])
    else:
        pass

해당 반복문에서 list index out if range 오류가 뜨는데 범위가 1부터 len(result)까지면 오류 뜰 부분이 없는 것 같은데 어디서 오류가 뜬 건지 모르겠습니다.

blissray commented 2 years ago

중간에 지워지면 전체 인덱스 값이 변합니다. 한번 실험적으로 result 변수의 값을 출력시켜 보세요.

blissray commented 2 years ago

방법중에 하나는 result 리스트를 복사한다음에 해당 값을 지울순 있겠네요.

kim-irubi commented 2 years ago
def number_of_cases(list_data):
    result = None
    result = []
    cases = ""
    if len(list_data) > 2:
        for i in range(len(list_data)):
            for k in range(len(list_data)):
                cases = str(list_data[i]) + str(list_data[k])
                result.append(cases)
    else:
        for i in range(len(list_data)):
            cases = "".join(list_data[i]) + cases
        result.append(cases)
    result_list = result
    n = len(result)
    for i in range(n):
        if result.count(result_list[i]) > 1:
            result.remove(result[i])
            n -= 1
        else:
            pass

이런 식으로 해봤는데도 계속 같은 오류가 뜨는데 어디가 문제인지 모르겠습니다..

kim-irubi commented 2 years ago

이번엔 if result.count(result_list[i]) > 1: 에서 해당 오류가 뜹니다.

blissray commented 2 years ago

result.remove(result[i]) 이코드 때문인데요 remove를 쓰면 코드의 범위가 바뀝니다. 계속