@Funky_Rhyme

Как работает этот код?

Прохожу периодически алгоритмические задачи на leetcode и в одной из них столкнулся с решением участника сообщества, которое я не в состоянии понять. (Есть опят кода на Java и C#).
def moveZeroes(self, nums):
    zero = 0  # records the position of "0"
    for i in xrange(len(nums)):
        if nums[i] != 0:
            nums[i], nums[zero] = nums[zero], nums[i]
            zero += 1

Непонятна конкретно предпоследняя строчка. Я читал, что в python могут исполнятся команды в строке через запятую (но вроде это не очень приветствуется), но я не вижу, что этот код выполняет.
P.S.
Задача: сместить все нули в конец массива, не создавая новый массив.
  • Вопрос задан
  • 166 просмотров
Решения вопроса 2
NeiroNx
@NeiroNx
Программист
если элемент не равен нулю то меняем местами с начальным элементом, увеличиваем начальный элемент на 1.
Обмен происходит через операцию присвоения.

В питоне можно присваивать значения массива(tuple в данном случае) набору переменных.

Экивалентно одновременному выполнеию операций:
nums[i] = nums[zero]
nums[zero] = nums[i]


На самом деле в памяти формируется промежуточный tuple (nums[zero], nums[i]) который затем присваивается двум переменным nums[i], nums[zero]
Ответ написан
32bit_me
@32bit_me
Программист, встраиваемые системы
Эта строчка меняет местами значения nums[i], nums[zero]. Здесь происходит присваивание значения кортежа nums[zero], nums[i] кортежу nums[i], nums[zero].
Теперь алгоритм понятен, я надеюсь?
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы