파이썬 리스트 질문 있습니다!
조회수 332회
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]
가 있는데
for
가 0
번째 위치에서 실행되니까 첫 번째 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}')
댓글 입력