리스트 아이템을 이터레이터로 제거하는 법

튜플을 저장하고 있는 리스트를 for in으로 접근해서 어떤 조건을 만족되면 제거할 건데요 튜플을 어떻게 제거해야할지 모르겠습니다.

소스코드

for tup in somelist:
    if 조건(tup):
         #튜플 제거

1답변

  • 좋아요

    0

    싫어요
    채택취소하기

    저 코드만 실행한다고 했을 때는 somelist[:] = [x for x in somelist if not determine(x)] 로 쓰는 것이 더 파이썬스러운 문장입니다.

    [:]를 쓰는 이유는 reference를 유지하기 위해서 입니다.

    예를 들어 그냥 대입만 한 경우

    myList = [{1:2}, {3:4}]
    otherList = myList
    
    print "--original--"
    print "myList:", myList
    print "otherList:", otherList
    
    myList = [tup for tup in myList if tup.has_key(1)]
    
    
    print "--changed--"
    print myList
    print otherList
    

    의 결과는

    --original--
    myList: [{1: 2}, {3: 4}]
    otherList: [{1: 2}, {3: 4}]
    --changed--
    [{1: 2}]
    [{1: 2}, {3: 4}]
    

    이지만, [:]를 썼을 때

    myList = [{1:2}, {3:4}]
    otherList = myList
    
    print "--original--"
    print "myList:", myList
    print "otherList:", otherList
    
    myList[:] = [tup for tup in myList if tup.has_key(1)]
    
    
    print "--changed--"
    print myList
    print otherList
    

    의 결과는

    --original--
    myList: [{1: 2}, {3: 4}]
    otherList: [{1: 2}, {3: 4}]
    --changed--
    [{1: 2}]
    [{1: 2}]
    

    입니다. 그냥 mylist=로 대입하는 것과 mylist[:]=를 쓰는 것의 차이점을 아시겠나요?

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.