완전한 제거
list1=[[1,3,5] , [9,7,6] , [11,2,12]]
위의 리스트에서 각각의 원소의 마지막 자리가 10보다 큰 원소만 남겨서 list1에 저장한다
저장후, list1을 출력한다
import implements
list1 = [[1,3,5][9,7,6][11,2,12]]
for i in list1:
if i[2]<10:
list1.remove(i)
print(list1)
<출력>
[[9,7,6],[11,2,12]]
결과가 이와 같이 나온 이유:
1. for문을 처음 통과할 때, i가 list[0]를 가리키면 if 조건에 의해 list1.remove(i)가 실행된다.
2. 이후 다시 for문으로 가는 과정에서 list1에서 1)의 과정에 의하여 [1,3,5]가 사라졌음을 알수 있다. 여기까지는 괜찮았다,,
3. 다시 한번 for문을 실행하는데, 2)의 과정이후 iterable이 바뀐것을 알 수 있다. 특이하게도 컴퓨터는 iterable이 변했음에도 i에 list[0]값을 대입했던 기억이 남아있는지, i에는 list[1]값부터 담기기 시작한다. 이부분에서 문제가 발생한다. [9,7,6]은 i가 list[0]값을 건너띔에 의해 제거되지 않는다. 해결해야할 부분은 list가 변하더라도 for문에서 i가 바뀐 list값을 처음부터 대입시켜야 한다는것이다.
그렇기 위해서 for문의 iterable자리의 구체적인 표현이 필요하다❕❕
list1 = [[1,3,5][9,7,6][11,2,12]]
for i in list1[:]:
if i[2]<10:
list1.remove(i)
print(list1)
[11,2,12]
list1: 을 list1[:]: 로 바꿔주며 인덱싱을 해주었다.
[:]는 첫 원소부터 끝 원소까지의 배열을 나타내는 리스트를 말한다.
이에 따라, 바뀐 list1 에 대해서도 i에 첫 원소부터 대입할 수 있다.
Author And Source
이 문제에 관하여(완전한 제거), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hojun1105/완전한-제거저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)