Что означает «^ =» в Python? - PullRequest
2 голосов
/ 06 июля 2019

Что ^= делает в python?

Я не уверен, похожи или связаны ^ и ^= по названию или поведению.

Пример вопроса:

Учитывая непустой массив целых чисел, каждый элемент появляется дважды, кроме одного.Найдите этот единственный.

nums = [3,3,4,2,2]

def singleNumber(self, nums: List[int]) -> int:
        a = 0
        for i in nums:
            a ^= i
        return a

Я ожидаю, что в этом случае будет 4.Но мне еще предстоит найти какой-либо определенный ресурс, объясняющий, как работает оператор ^=.

Пожалуйста, объясните, что это такое и как это работает.

Ответы [ 2 ]

3 голосов
/ 06 июля 2019

Оператор ^ является двоичным XOR (исключающее ИЛИ). Так что ^ = это XOR i над a, помещенный обратно в a.

например:

a  = 9 1001
a ^= 5 0101
       ----
   XOR 1100 = 12

a will contain 12

Для списка [3,3,4,2,2]:

a  = 0 000
a ^= 3 011 -> 011
a ^= 3        011 -> 000
a ^= 4               100 -> 100
a ^= 2                      010 -> 110
a ^= 2                             010 -> 100 = 4
2 голосов
/ 06 июля 2019

Если вас интересует, как на самом деле работает алгоритм, это зависит от нежелательных элементов, которые должны быть парами, в частности, от четного их числа.Используя XOR, вы можете делать такие вещи, как:

>>> A ^ A
 0
>>> B == A ^ B ^ A
 True

для любых целочисленных значений A и BIe XOR чего-либо с самим собой равно нулю, A ^ A равно нулю.Точно так же число XOR ноль само по себе, как A ^ 0 это A.Операция также является коммутативной, поэтому A ^ A ^ B (который сокращается до 0 ^ B, то есть просто B) совпадает с A ^ B ^ A.Поэтому, если вы примените это к списку, в котором все элементы, кроме одного, появляются четное число раз, остается только один нечетный из них, когда они все вместе XOR.

Что касается оператора ^=,это уже объяснено.A ^= B совпадает с A = A ^ B.Многие операторы могут использоваться таким образом, например, A += 1 совпадает с A = A + 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...