파이썬 리스트 질문 있습니다!

조회수 322회
import random
data=[random.randint(1,3) for i in range(10)]
print(data)
target=2

print(f'target({target}) 삭제 전:{data}')
for n in data:  
    if n==target:
        data.remove(target) 
print(f'target({target}) 삭제 후:{data}')

이 코드에서 질문이 있습니다.

일단 리스트에 [2 2 1 3 2 3 1 2 2 2]가 있는데
for0번째 위치에서 실행되니까 첫 번째 2가 지워지고 data = [2 1 3 2 3 1 2 2 2]로 정의됩니다.
그러면 다시 for loop로 돌아왔을 때 이제는 1번째 위치에서 실행하니까 인덱스 1에 있는 요소인 1이 지워지고 data = [2 3 2 3 1 2 2 2] 되는 거 아닌가요?
왜 실행 결과가 [1, 3, 3, 1, 2, 2]인지 이해가 잘 되지 않습니다.

1 답변

  • 간단해요. 여기서의 n은 인덱스가 아니라 그 인덱스에 할당된 값입니다. 주어진 예제에서 [2, 2, 1, 3...] 이 첫 순회 후 [2, 1, 3...] 이 된 건, 첫 순회 때 n=0이었기 때문이 아니고, 처음으로 확인한 자료가 하필 2였기 때문입니다. 순전히 우연이죠.

    잘 모르시겠다면 print()를 잔뜩 찍어 보세요.

    import random
    data = [random.randint(1,3) for i in range(10)]
    print(data)
    target = 2
    
    print(f'target({target}) 삭제 전:{data}')
    for n in data:
        log = str(n)
        if n == target:
            log += ' ---> should eliminate!'
            data.remove(target)
        print(log)
    print(f'target({target}) 삭제 후:{data}')
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)