Ответ 1
zxor = reduce(lambda a, b: a ^ b, z, 0)
import operator
zxor = reduce(operator.xor, z, 0)
Мне нравится функция суммы Python:
>>> z = [1] * 11
>>> zsum = sum(z)
>>> zsum == 11
True
Мне нужна такая же функциональность с использованием xor (^) not add (+). Я хочу использовать карту. Но я не могу понять, как это сделать. Любые подсказки?
Я не удовлетворен этим:
def xor(l):
r = 0
for v in l: r ^= v
return v
Я хочу, чтобы 1 лайнер использовал карту. Подсказки?
zxor = reduce(lambda a, b: a ^ b, z, 0)
import operator
zxor = reduce(operator.xor, z, 0)
Обратите внимание, что начиная с Python 3.8
и введением выражений присваивания (PEP 572) (:=
оператор), мы можем использовать и обновлять переменную в пределах понимания списка и, таким образом, сокращать список до xor его элементов:
zxor = 0
[zxor := zxor ^ x for x in [1, 0, 1, 0, 1, 0]]
# zxor = 1