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


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

소스코드

for tup in somelist:
    if 조건(tup):
         #튜플 제거
  • 2016년 01월 11일에 작성됨

조회수 223


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[:]=를 쓰는 것의 차이점을 아시겠나요?

  • 2016년 01월 11일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close