에서 "설정의 차이"를 설명해주십시오 내가 만난 다음파이썬을 배우려고 노력 파이썬
>>> set('spam') - set('ham')
set(['p', 's'])
는 왜 set(['p', 's'])
입니다 - 내 말은 왜 'h'
가 없습니다?
에서 "설정의 차이"를 설명해주십시오 내가 만난 다음파이썬을 배우려고 노력 파이썬
>>> set('spam') - set('ham')
set(['p', 's'])
는 왜 set(['p', 's'])
입니다 - 내 말은 왜 'h'
가 없습니다?
파이썬 세트의 -
연산자는 의 멤버가 아닌 A
세트의 멤버로 정의 된 difference
메서드에 매핑됩니다. 따라서이 경우 의 멤버는 "ham"
이 아니며 "s"
및 "p"
입니다. 이 메서드는 교환 가능하지 않습니다 (즉, a - b == b - a
이 항상 true는 아닙니다).
당신은 symmetric_difference
또는 ^
방법을 찾고있을 수 있습니다
>>> set("spam")^set("ham")
{'h', 'p', 's'}
이 연산자 은 교환 법칙이 성립입니다.
집합 차이의 정의이기 때문에. 평이한 영어로 "A에있는 요소는 B에 있지 않습니다"와 동일합니다.
주는 역 동작이 더 분명
>>> set('spam') - set('ham')
{'s', 'p'}
>>> set('ham') - set('spam')
{'h'}
모든 독특한 요소를 얻으려면, 당신이 요청하는 순서를 무시하면 설정된 차이가 symmetric_difference
>>> set('spam').symmetric_difference(set('ham'))
{'s', 'h', 'p'}
여기서'set ('ham')'은 필요 없다. set 메소드는 반복 가능하므로'set ('spam')을 사용한다. symmetric_difference ('ham')'괜찮다. –
사용할 수 있습니다 두 번째 집합에없는 첫 번째 집합의 모든 문자 집합입니다. 'p'와 's'는 첫 번째 집합에는 나타나지만 두 번째 집합에는 나타나지 않으므로 집합 차이가 발생합니다. 'h'는 첫 번째 집합에 나타나지 않으므로 첫 번째 집합에 있는지 여부에 관계없이 집합 차이가 아닙니다.
두 개의 서로 다른 operators 있습니다
A - B
또는 A.difference(B)
으로 작성됩니다.A^B
또는 A.symmetric_difference(B)
으로 작성됩니다.귀하의 코드는 전자를 사용하고 있지만 귀하는 후자를 기대하는 것 같습니다.
또한으로 원하는 결과를 얻을 수 있습니다
>>> (set('spam') | set('ham')) - (set('spam') & set('ham'))
set(['p', 's', 'h'])
이 &
를 사용 |
및 교차를 사용 조합 만들기를하고, 즉 의 차이 집합을 수행하십시오의 모든 요소는이고 은 공통 요소입니다.
왜'h '가 * 포함될 것으로 예상합니까 *? –
나는 차이점을 보여줄 것이라고 생각 했으므로, 내 느낌에서 나는 'h'가 포함될 것으로 예상했다. 내가 잘못한 것 같아. – Rockbot