인프런 커뮤니티 질문&답변

Jake Seo님의 프로필 이미지
Jake Seo

작성한 질문수

파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)

문제를 풀며 가장 자연스럽게 익숙해지는 파이썬 기본: 반복문과 다양한 데이터구조 활용1

데이터 구조와 반복문에서 exercise 38번 관련입니다.

작성

·

170

0

강의 감사히 잘 듣고 있습니다. 컨텐츠랑 강사님 전달방식 모두 훌륭하셔서 비전공자로서 많은 도움이 됩니다. 아래 질문 드립니다.

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

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

이 예제에서 강사님 풀이와 달리, remove방식으로 num_list에서 직접 빼는것도 한번 해봤는데요.


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]로 실행되네요.
어떻게 하면 결과가 잘 실행될까요..?

답변 1

1

안녕하세요. 극찬을 해주셔서 감사하고 다행이네요.

사실 질문이 정확히 이해는 안가는데요. 작성된 코드 다음과 같이 그대로 실행하면, 문제에 해답 코드로 나올 것 같아서요. 파이썬 3.8 에서도 동일하게 나오고요. 

plus_list = list()
num_list = [0, -11, 31, 22, -11, 33, -44, -55]

for num in num_list:
if num >= 0:
plus_list.append(num)

print (plus_list)
혹시나, 뭔가 셀 위아래에 이미 값이 들어가 있는 변수가 있어서 그럴수도 있고요.
다음 예전 공지를 참고하시면 좋을 것 같습니다.
감사합니다.
-------------

안녕하세요. 잔재미코딩 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. 그래도 안되면, 구글에 저의 이슈를 영어로 검색어를 만들어 검색을 한다 입니다.

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

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

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

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

감사합니다.

Jake Seo님의 프로필 이미지
Jake Seo

작성한 질문수

질문하기