리스트 아이템을 이터레이터로 제거하는 법
조회수 2616회
튜플을 저장하고 있는 리스트를 for in
으로 접근해서
어떤 조건을 만족되면 제거할 건데요
튜플을 어떻게 제거해야할지 모르겠습니다.
소스코드
for tup in somelist:
if 조건(tup):
#튜플 제거
1 답변
-
저 코드만 실행한다고 했을 때는
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[:]=
를 쓰는 것의 차이점을 아시겠나요?
댓글 입력