의 ^
중위 연산자는 정수에 대한 XOR를 나타냅니다 (당신이보고이를 볼 수 있습니다 int.__xor__
에 대한 설명서가 있지만 에주의해야합니다.의 경우 __xor__
동작이 다른 유형에 과부하 될 수 있으며 일반적인 논리 xor 연산과 관련된 내용이 반영되지 않을 수 있습니다.
이 경우에, 당신은 그것을 좋아 할 수 있습니다 : 예를 들어
def xor(tup_a, tup_b):
return tuple(a^b for a,b in zip(tup_a, tup_b))
:
이
In [5]: xor((1,2,3), (3, 2, 1))
Out[5]: (2, 0, 2)
이 익숙하지 않은 경우에 대한 읽어야되는 zip
기능을 사용한다. 이 함수에 대한 하나의 규칙 : tup_a
과 tup_b
의 길이가 같지 않으면 지퍼 링 프로세스가 더 짧은 길이까지만 발생하며 긴 지오메트리의 나머지 항목은 무시됩니다.
여분의 항목을 처리하기 위해 특별한 작업을 수행하기 위해 특별한 코드를 작성하려면 itertools.izip_longest
을 사용하도록이 함수 정의를 수정해야합니다. 예를 들어
, ... tup_a
다음보다 짧은 tup_b
인 경우 tup_a
이 tup_b
에서 무언가와 일치 긴 것만으로는 충분하지 않습니다 어디 장소에서 0
의 더미 값을 사용한다고 가정
from itertools import izip_longest
def xor(tup_a, tup_b, fill=0):
return tuple(a^b for a,b in izip_longest(tup_a, tup_b, fillvalue=fill))
다음 :
In [11]: xor((1,2,3), (3, 2, 1))
Out[11]: (2, 0, 2)
In [12]: xor((1,2), (3, 2, 1))
Out[12]: (2, 0, 1)
무엇이 문제입니까? 어떤 입력 값이 잘못된 결과를 산출합니까? – AlG
나는 그것이 올바른 가치를 부여하는지 여부를 확인할 수 있다고 생각한다. –
비트 XOR 또는 부울 XOR? –