2017-03-12 2 views
1

arr1과 arr2 사이에 누락 된 요소를 찾으려고하지만 코드와 관련된 문제점이 무엇인지, 왜 작동하지 않는지 확실하지 않습니다. 제발 제안 해주세요.파이썬 루핑이 예상 된 결과를 제공하지 않습니다

def miss2(arr1, arr2): 
    arr3=arr1 
    for i in arr1: 
     # print(i) 
     for j in arr2: 
      # print(i,j) 
      if i == j: 
       arr3.remove(j) 

    print(arr3) 

arr1=[1,2,3,4] 
arr2=[1,2] 

miss2(arr1,arr2) 

결과 : 파이썬에서 [2, 3, 4] 대신 [3, 4]

+1

당신은 사본을 만들 필요가 없습니다 단지 새로운 레퍼런스'arr3 = arr1 [:]', 문제를 해결합니다. – AChampion

+0

바보 감사합니다. – user3752941

답변

3

객체는 arr3arr1의 값을 할당하지 않았 음을 의미합니다 참조에 의해 저장되지만 object.You에 대한 포인터 수 is 연산자를 사용하여 두 객체의 메모리 주소가 같은지 테스트하십시오.

시퀀스는 그래서 당신은 목록을 복사하려면이 옵션을 사용할 수 있습니다 슬라이스로 복사 할 수 있습니다 : 당신이

arr3 = list(arr1) 

를 사용하거나 복사() 모듈을 사용할 수 있습니다 또한

arr3 = arr1[:] 

을 :

from copy import copy 
arr3 = copy(arr1) 

그런데 시도해 볼 수 있습니다.

print [i for i in arr1 if i not in arr2] 
0

McGrady가 맞습니다. 다음은 참조 문제에 대해 더 많은 정보를 제공하는 기사입니다. 여기 Is Python call-by-value or call-by-reference?

그리고 당신은 "설정"대신 "목록"의 데이터 구조 (수학 개념을 고려)를 사용할 수 있습니다 :

x = set([1,2,3,4]) 
y = set([1,2]) 
x - y 
관련 문제