반응형

이슈

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']

 

반응형

+ Recent posts