파이썬 리스트에서 0이 들어간 값을 제거하려고 하는데

조회수 1711회
for i in range(10,100):
    list_2.append(i)

for i in range(100,1000):
    list_3.append(i)

for i in list_2:
    str1 = str(i)
    for j in range(2):
        if int(str1[j]) == 0:
            list_2.remove(i)

for i in list_3:
    str2 = str(i)
    for j in range(3):
        if int(str2[j]) == 0:
            list_3.remove(i)

2자리수 리스트와 3자리수 리스트를 만들고 거기서 0이 들어간 10,20,100,200등을 삭제하려고 하는데 2자리수 리스트는 정상적으로 삭제가 되는데 왜 3자리수 리스트에서는 list_3.remove(i)에서 i not in list 에러가 뜰까요?

  • (•́ ✖ •̀)
    알 수 없는 사용자

3 답변

  • for i in list_3:
        str2 = str(i)
        for j in range(3):
            if int(str2[j]) == 0:
                list_3.remove(i)
                break
    

    2번째 list_3 로직을 보면 100(이하 list_3[0])이 들어왔다고 가정하면

    1 > 0이 아님 if문 안거침

    0 > 0이므로 list_3[0] 삭제.

    0 > 0이므로 list_3[0] 삭제. (이미.. list_3[0] 은 없으므로 에러발생)

    그러므로

    1 > 0이 아님 if문 안거침

    0 > 0이므로 list_3[0] 삭제. break

    하셔야 합니다.

  • 좀 개선해 보자면,

    for i in list_2:
        str1 = str(i)
        #for j in range(2):
        #    if int(str1[j]) == 0:
        #        list_2.remove(i)
        if "0" in str1:
                list_2.remove(i)
    

    더 개선을 해본다면,

    list_2 = [ e for e in list_2 if "0" not in str(e) ]
    
    • 와우 깔끔하네요. 파이썬스럽게 바꿔주셨네요. 감사합니다. 알 수 없는 사용자 2020.9.17 16:41
  • 파티가 끝난거 같긴 한데 수학적으로 풀어보는 방법도 있긴 합니다.

    import math
    
    # 기본 아이디어: 2070 % 100 == 70 == 2070 % 1000
    # 이 경우는 셋째 자리 수가 0이기 때문에 참이 된다.
    def has_zero(num) :
    
        # 10, 100, 1000... 으로 나눗셈하면서 앞전에 나온 나머지와 지금 나온 나머지가 같은지 본다.
        lastMOD = 0
        unit = 10;
        while num >= unit :
            thisMOD = num % unit
            if thisMOD == lastMOD :
                return True
            lastMOD = thisMOD
            unit = unit * 10;
        return False
    
    # 놀랍게도 작동을 합니다.
    print(has_zero(10))
    print(has_zero(207))
    print(has_zero(6000))
    print(has_zero(70060))
    print(has_zero(77767))
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)