반응형
이슈
Python에서 loop(for)문으로 돌면서 특정 요소를 삭제시, 모든 요소를 체크하지 못하는 이슈
원인
Loop를 돌다가 삭제가 되면 다음 인덱스가 건너 띄워진다
(Ex. 위의 예제) [a,b,c,d]에서 Index=0인 a를 지우고, 다음 index인 1로 진행하면, [b,c,d]의 [1]인 c를 조회 => b를 skip!
해결
For문을 돌때 for l1 in list1[:]: 처럼 뒤에 [:]를 붙이면 복사면으로 루프를 돌리기 때문에 원하는 결과가 출력
(ex. for l1 in list1[:] :)
list1 = ['a','b','c','d']
list2 = ['a','b','e','f']
for l1 in list1[:]:
logging.info('비교대상 : %s', l1)
if(l1 in list2):
list1.remove(l1)
list2.remove(l1)
logging.info('비교 끝! ')
logging.info(list1)
logging.info(list2)
비교대상 : a
비교대상 : c
비교대상 : d
비교 끝!
['b', 'c', 'd']
['b', 'e', 'f']
list1 = ['a','b','c','d']
list2 = ['a','b','e','f']
for l1 in list1:
logging.info('비교대상 : %s', l1)
if(l1 in list2):
list1.remove(l1)
list2.remove(l1)
logging.info('비교 끝! ')
logging.info(list1)
logging.info(list2)
비교대상 : a
비교대상 : b
비교대상 : c
비교대상 : d
비교 끝!
['c', 'd']
['e', 'f']
반응형