Найти в Дзене
Learning to Python

«Моржевый» оператор LeetCode 1720

Всем привет! Сегодня узнал о «моржовом» операторе. Моржовый (или walrus по-английски) – из-за сходства := с мордочкой моржа (тут = это бивни). Вот тут можно почитать поподробнее. Но обо всем по порядку Задача была простая. Нужно было создать список из существующего. Причем нам объясняют, что заданный список, является зашифрованным, а нам нужно его расшифровать. Так же сказано, что шифрование делалось с помощью операции логическое ИЛИ (XOR). И еще дана первая цифра для разгадки Так как мы уже знаем, что XOR является обратной операцией для самой себя, то первое решение быстро нашлось. Просто в цикле проделываем XOR со всеми элементами по очереди. Решение получается достаточно эффективным Затем мне захотелось, все это упаковать в list comprechention, так как все вроде подходит: Загвоздка в том, что каждый следующий элемент нужно задавать из предыдущего, получается такая рекурсия, которую запихнуть в list comprechention нельзя. Или так мне казалось. Тут-то и появляется оператор := Он позво

Всем привет!

Сегодня узнал о «моржовом» операторе. Моржовый (или walrus по-английски) – из-за сходства := с мордочкой моржа (тут = это бивни). Вот тут можно почитать поподробнее. Но обо всем по порядку

Задача была простая. Нужно было создать список из существующего. Причем нам объясняют, что заданный список, является зашифрованным, а нам нужно его расшифровать.

LeetCode 1720
LeetCode 1720

Так же сказано, что шифрование делалось с помощью операции логическое ИЛИ (XOR). И еще дана первая цифра для разгадки

Так как мы уже знаем, что XOR является обратной операцией для самой себя, то первое решение быстро нашлось.

Первое решение
Первое решение

Просто в цикле проделываем XOR со всеми элементами по очереди.

Решение получается достаточно эффективным

-3

Затем мне захотелось, все это упаковать в list comprechention, так как все вроде подходит:

  1. нужно создать список;
  2. для этого используем простой цикл;
  3. дополнительных условий нет.

Загвоздка в том, что каждый следующий элемент нужно задавать из предыдущего, получается такая рекурсия, которую запихнуть в list comprechention нельзя.

Или так мне казалось. Тут-то и появляется оператор :=

Он позволяет присвоить и одновременно вернуть необходимое значение внутри функции.

В случае list comprechention у нас появляется возможность манипулировать с предыдущим значением и включать его в список.

list comprechention и оператор :=
list comprechention и оператор :=

В итого получилась одна строчка. Причем эффективность примерно такая же.

-5

Продолжаю изучать что-то новое

До скорого