2017-11-24 2 views
1

목록에서 음수를 제거하려고합니다. 나는 계속해서 두 개의 연속적인 음수가 제거되지 않는 문제에 직면했다. 내 코드는 매우 간단합니다 :반복 - 파이썬

numbers = [-5, 1, -3, -1] 

    def remove_neg(num_list): 
     for item in num_list: 
      if item < 0: 
       num_list.remove(item) 

    print(remove_neg(numbers)) 
    #[1, -1] 

나는 내 코드의 4 가지 버전을 시도하고 내 머리에서 약간의 머리카락을 잡아 당겨 후 온라인 답을 발견했다. 내가 찾은 대답은 r = numbers [:]로 지정된 다음 초기 목록 대신 r에서 항목을 제거했습니다.

def remove_neg(num_list): 
     r = numbers [:] 
     for item in num_list: 
      if item < 0: 
       r.remove(item) 
     print(r) 

이 개념은 두 개의 목록 변수가 별도의 데이터를 가리키는 것으로 이해합니다. 왜 내가 이해하지 못하는지, 내 초기 코드가 작동하지 않는 이유입니다. for i in numbers:은 목록의 모든 항목을 반복해야합니까? 두 연속 숫자가 왜 똑같이 취급되지 않습니까? 나는 이유를 찾고 샅샅이 뒤졌고 대답을 찾지 못하는 것 같습니다.

답변

0

첫 번째 예제에서는 반복하는 동안 목록을 수정합니다. 앞에서 보았 듯이 반복을 망칠 수 있습니다. 두 번째 예제가 효과가 있지만 매우 비효율적이므로 제외 어없이 새 목록을 구성하는 데는 목록 이해를 사용하는 것이 훨씬 쉽습니다.

def remove_neg(num_list): 
    return [x for x in num_list if x > 0] 
+0

AH! 너의 맨 처음 문장은 내 머리 속의 전구를 클릭했다. 이제 알겠다! 회신 및 목록 이해 예제에 대해 감사드립니다. – jmleczko