반복문 데이터 구조 (리스트 원소 삭제)

미해결질문
nealzs 프로필

Exercise 38. 데이터 구조와 반복문 (리스트)

  • 다음 리스트 변수에서 음수 데이터를 삭제하고, 양수만 가진 리스트 변수로 만들고, 해당 변수를 출력하세요.
num_list = [0, -11, 31, 22, -11, 33, -44, -55]



해당 문제에서 저는

num_list = [0, -11, 31, 22, -11, 33, -44, -55] for i in num_list: if i < 0: num_list.remove(i)



이와 같이 돌려보았는데 밑의 출력값이 나옵니다.
list의 값들을 바꿔서 해보니
연속된 음수의 숫자일때 .remove가 적용이 안 되는것 같은데
어떤것이 문제인지 알려주시면 감사하겠습니다.

nealzs 프로필
nealzs 1달 전

num_list를 다른 변수에 복사 하면 되는 것 같은데

아직 위에선 무엇이 문제인지 잘 모르겠습니다;; ㅎㅎ

잔재미코딩 프로필
잔재미코딩 1달 전

안녕하세요. 이 부분은 기존의 새소식을 참고하시면 좋을 것 같습니다.

안녕하세요. 잔재미코딩 Dave Lee 강사입니다.

오늘은 재미있는 케이스와 함께, 개발자로 역량을 키우실 수 있는 팁을 공유드리면 좋을 것 같아서, 공유드려요.

다음과 같은 문의가 올라왔는데요. 재미있으면서도, 이런 경우는 실제 개발자라면 어떻게 해결해 나갈까를 생각해볼 수 있는 문의같습니다.

-------------------

Exercise 38. 데이터 구조와 반복문 (리스트)

다음 리스트 변수에서 음수 데이터를 삭제하고, 양수만 가진 리스트 변수로 만들고, 해당 변수를 출력하세요.

num_list = [0, -11, 31, 22, -11, 33, -44, -55]

코드:

num_list = [0, -11, 31, 22, -11, 33, -44, -55]

for i in num_list:

    if i < 0:

        num_list.remove(i)

print(num_list)

실행 결과 : [0, 31, 22, 33, -55]

38번 문제를 풀기 위해서 위 코드와 같이 작성하였는데 -55가 왜 남아있는지 이해가 안가서 질문드립니다!

-------------------

이 문제에 답을 찾기 위해, 저는 

1. 위 코드를 먼저 실행해봤고, 이상한 부분을 이해했고,

2. 코드를 다음과 같이 각 단계별로 어떤 부분이 이상이 있는지를 변수값을 모두 line by line 으로 출력해보았습니다.

첫번째! - 음 문제 없네

num_list = [0, -11, 31, 22, -11, 33, -44, -55]

print (num_list)

두번째! - 음 문제 없네

num_list = [0, -11, 31, 22, -11, 33, -44, -55]

print (num_list)

for index, item in enumerate(num_list):

    print (index, num_list, item)

세번째! - 아 여기서 문제가 있을 수 있구나~

num_list = [0, -11, 31, 22, -11, 33, -44, -55]

print (num_list)

for index, item in enumerate(num_list):

    print (index, num_list, item)

    if item < 0:

        num_list.remove(item)

세번째 각 라인의 출력 결과를 보고, num_list 리스트 값이 동적으로 반복문 안에서 변경이 되면서, 

마지막 반복문이 실행시에 num_list의 길이는 5이고, 반복문 횟수는 0~4까지, 즉 5번이 되어,

num_list의 마지막 값인 -55 이 반복되지 않고, 그대로 반복문이 종료되었다는 것을 깨닫게 되었습니다.

제가 공유드리면 좋겠다는 팁은,

이와 같이 개발자분들은 항상 의외의 상황을 맞이하게 되는데요.

저 같은 경우는 세 가지 팁을 사용해서 문제를 해결합니다. 어차피 매번 저만의 이슈를 해결해줄 수 있는 사람은 없으니까요.

1. 코드가 내가 원하는대로 동작하지 않을 때에는 가능한 범위를 좁혀서, 가장 확실한 부분 또는 맨 윗 부분부터

의심이 되는 부분들을 모두 출력해본다. 그래도 이해가 안가면, line by line 으로 사용된 변수들의 값을 모두

출력한다.

이렇게 되면 변수가 어떻게 값이 변경되는지 이해하면서, 코드가 왜 이렇게 실행이 됬는지를 알 수 있습니다.

2. 이래도 안되면, 구글에 여러가지 검색어를 놓고, 검색을 한다 입니다.

어차피 사람은 동일해서 저만 이런 이슈를 가지고 있는 경우는 매우 드뭅니다. 다른 사람들도 유사한 이슈를 겪었고,

개발자분들은 그래도 이런 부분들을 공유하는 편입니다.

3. 그래도 안되면, 구글에 저의 이슈를 영어로 검색어를 만들어 검색을 한다 입니다.

국내 개발자가 아니라면, 분명 외국 개발자들이 유사한 이슈를 겪을 수 있습니다. 

이 세가지를 매번 이슈를 만날때마다 하게 되면, 숙련되고, 자신만의 노하우도 생기고, 갈수록 좀더 빠르게

문제를 해결하고, 더 많은 기술을 이해하실 수 있으실 꺼예요.

이런 팁도 꼭 도움이 되었으면 좋겠습니다.

감사합니다.

지식공유자 되기
많은 사람들에게 배움의 기회를 주고,
경제적 보상을 받아보세요.
지식공유참여
기업 교육을 위한 인프런
“인프런 비즈니스” 를 통해 모든 팀원이 인프런의 강의들을
자유롭게 학습하는 환경을 제공하세요.
인프런 비즈니스