Программа курса:
Разбор задачи: Удаление элемента
Предложенный нами код решения:
def remove_element(nums, val):
"""
Удаляет все вхождения val из nums на месте и возвращает количество элементов, не равных val.
"""
k = 0 # Указатель для записи элементов, не равных val
for num in nums:
if num != val:
nums[k] = num
k += 1
return k
Шаг 1. Определение задачи
Задача функции состоит в том, чтобы удалить все вхождения заданного значения val
из списка nums
"на месте" (без создания нового списка) и вернуть количество элементов, которые не равны val
.
Условия:
- После работы функции первые
k
элементов спискаnums
должны содержать элементы, не равныеval
. - Остальная часть списка (после
k
) не важна для решения задачи.
Шаг 2. Разбор кода
1. k = 0
:
- Инициализация переменной
k
. Она указывает на позицию в спискеnums
, куда будет записан следующий элемент, не равныйval
. - На момент начала работы
k = 0
.
2. Цикл for num in nums
:
- Цикл проходит по каждому элементу в массиве
nums
.
3. Условие if num != val
:
- Проверяет, является ли текущий элемент
num
не равнымval
. - Если условие выполняется:
Текущий элемент
num
записывается в позициюk
в массивеnums
:nums[k] = num
Значение
k
увеличивается на 1:k += 1
- Если элемент равен
val
, он просто пропускается.
4. Возвращаемое значение k
:
- После завершения цикла
k
содержит количество элементов, которые не равныval
. - Первые
k
элементов в спискеnums
теперь содержат корректные элементы.
Шаг 3. Пример выполнения
Входные данные:
nums = [3, 2, 2, 3]
val = 3
Инициализация:
k = 0
- Первый элемент (
num = 3
):- Проверка:
num != val
(3 != 3) → ложь. - Этот элемент пропускается,
k
остаётся 0.
- Проверка:
- Второй элемент (
num = 2
):- Проверка:
num != val
(2 != 3) → истина. Элемент записывается в позицию
nums[k]
(то естьnums[0]
):nums[0] = 2
k
увеличивается на 1:k = 1
- Проверка:
- Третий элемент (
num = 2
):- Проверка:
num != val
(2 != 3) → истина. Элемент записывается в позицию
nums[k]
(то естьnums[1]
):nums[1] = 2
k
увеличивается на 1:k = 2
- Проверка:
- Четвёртый элемент (
num = 3
):- Проверка:
num != val
(3 != 3) → ложь. - Этот элемент пропускается,
k
остаётся 2.
- Проверка:
Итоговые данные:
- Массив:
[2, 2, _, _]
(после первыхk
элементов значения не важны). - Возвращаемое значение:
k = 2
.