파이썬 리스트 최대 문자열 삭제

조회수 1773회

파이썬인데 A = ['c', 'bad' , 'base', 'oracle', 'pandom'] 리스트에서 최대 문자열을 삭제하라.(이때 같은 길이 문자열이 있으면 모두 삭제). (ex. oracle 랑 pandom 둘 다 삭제)

최대 문자열도 알겠고, 삭제도 알겠는데 최대 문자열(max함수)로 하니까 하나만 삭제되는데 두 개(같은 길이 문자열)는 어떻게 삭제하죠?? 최대한 해보려고 했는데 아래처럼 len 길이가 같은 문자열을 remove로 제거하려고 해서 했는데 안되네요 막막합니다.. 도와주세요!!

A = ['c', 'bad' , 'base', 'oracle', 'pandom']

for i in A:
    if len(i) == len(max(i)):
        A.remove(i)

print(A)

수정할 부분좀 가르쳐주시면 감사하겠습니다 :)

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

2 답변

  • for문을 사용하면 예를 들어 숫자라면 순차적으로 0, 1, 2, 3.. 순으로 진행됩니다.

    그런데 중간에 리스트 요소가 삭제된다면, 그 중간에 낀 요소는 검사하지 않겠죠.

    가령 3번째 리스트 요소를 지운다면 4번째 리스트 요소가 3번째로 당겨지기 때문에 4번째 리스트 요소를 검사할 때에는 5번째 리스트 요소를 검사하게 되는 겁니다.

    이런 문제를 피하려면 또다른 리스트를 만들어주는게 더 편합니다.

    A = ['c', 'bad' , 'base', 'oracle', 'pandom']
    
    b = [len(i) for i in A]
    print(max(b))
    
    c = []
    for i in A:
        if len(i) < max(b):
            c.append(i)
    
    print(A)
    print(c)
    
    >> 6
    ['c', 'bad', 'base', 'oracle', 'pandom']
    ['c', 'bad', 'base']
    
    • 아~ 이해가 되었습니다. 진짜 진짜 감사합니다 :) 이거 때문에 거의 반나절을 세웠네요 ㅜㅠ이해가 되었습니다. 진짜진짜 감사합니다 :) 이거 때문에 거의 반나절을 세웠네요 ㅜㅠ 알 수 없는 사용자 2021.4.10 16:38
    • 저도 이거 때문에 시간을 날렸던 적이 있었는데.. 어떻게 보면 간단한 거라서 정말 짜증났었죠.. ㅋㅋ 초보자 2021.4.10 16:39
    • ㅋㅋㅋㅋ 사람 사는거 다 똑같나 봅니다 :) 저도 점점 많이 해보다 보면 님처럼 잘할 수 있겠죠!?? 진짜 혼자하기 너무 힘드네요 ㅠ 알 수 없는 사용자 2021.4.10 17:16
    • 과찬이십니다.. ㅎㅎ 저도 아직 간신히 한 발짝만 땐 수준입니다 ㅠㅠ 초보자 2021.4.12 08:45
  • >>> A = ['c', 'bad' , 'base', 'oracle', 'pandom']
    >>> m = max(A, key=len)
    >>> m
    'oracle'
    >>> A = [ e for e in A if len(e) < len(m) ]
    >>> A
    ['c', 'bad', 'base']
    

    약간 더 파이써닉하게 리스트컴프리헨션을 써 보면 이렇습니다.

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

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

(ಠ_ಠ)
(ಠ‿ಠ)