안녕하세요, 파이썬에서 두리스트가 있고 두리스트에서 공통 값을 제거하고 싶다고합시다. 해결책은 다음과 같습니다.파이썬에서 두리스트의 공통 값 제거하기
x = [1, 2, 3, 4, 5, 6, 7, 8]
y = [43, 3123, 543, 76, 879, 32, 14241, 342, 2, 3, 4]
for i in x:
if i in y:
x.remove(i)
y.remove(i)
정확하지만 보이지 않습니다. 이유는 목록에서 항목을 제거하면 색인이 계속 반복되기 때문입니다. 따라서 값이 서로 가까이있는 두 개의 공통 값에 대해서는 나중에 값이 누락됩니다 (코드는 반복하지 않습니다). 결과는 다음과 같습니다
>>> x
[1, 3, 5, 6, 8, 9, 10]
>>> y
[43, 3123, 543, 76, 879, 32, 14241, 342, 3]
그래서 우리는 값
'3'
누락되었습니다.
내가 언급 한 행동의 이유는 무엇입니까? 아니면 나 다른 잘못하고있는거야?
네, 개체를 반복하면서 개체를 수정하면이 문제가 발생할 수 있습니다. –
이 질문을보십시오 : [반복하는 동안 목록에서 항목 제거] (https://stackoverflow.com/questions/1207406/remove-items-from-a-list-while-iterating) – direprobs
강력하게 권장하지 않습니다. 반복하는 값을 수정하십시오. 이렇게하면 코드가하는 일을 이해하려는 사람이 루프의 흐름을 판단하기가 어려울 수 있습니다. 이런 경우 다음과 같이 목록이나 다른 반복 가능한 객체의 개별 사본을 수정하거나 색인을 반복하여 목록에 추가하는 것이 일반적입니다. 'for i in range (len (x)) : print (x [i])' – Aaron