Программа курса:
Разбор задачи: Объединение двух отсортированных списков
Предложенный нами код решения:
def merge_two_lists(list1, list2):
# Инициализируем пустой список для результата
merged_list = []
# Указатели на текущие индексы в list1 и list2
i, j = 0, 0
# Проходим по обоим спискам, пока не достигнем конца хотя бы одного
while i < len(list1) and j < len(list2):
if list1[i] <= list2[j]:
merged_list.append(list1[i])
i += 1
else:
merged_list.append(list2[j])
j += 1
# Добавляем оставшиеся элементы из list1 или list2
merged_list.extend(list1[i:])
merged_list.extend(list2[j:])
return merged_list1. Инициализация пустого списка результата
merged_list = []
Мы создаём пустой список merged_list, куда будем последовательно добавлять элементы из обоих входных списков в отсортированном порядке.
2. Инициализация указателей
i, j = 0, 0
Указатели i и j используются для отслеживания текущей позиции в списках list1 и list2. Они начинаются с 0, так как мы стартуем с начала каждого списка.
3. Основной цикл: слияние списков
while i < len(list1) and j < len(list2):
if list1[i] <= list2[j]:
merged_list.append(list1[i])
i += 1
else:
merged_list.append(list2[j])
j += 1
- Условие
while: Цикл продолжается до тех пор, пока оба указателяiиjнаходятся внутри границ соответствующих списков. Это означает, что у нас есть элементы в обоих списках для сравнения. - Сравнение элементов:
- Если текущий элемент из
list1меньше или равен текущему элементу изlist2, то этот элемент добавляется вmerged_list, и указательiувеличивается на 1. - Иначе добавляется элемент из
list2, и указательjувеличивается на 1.
- Если текущий элемент из
Таким образом, мы всегда добавляем минимальный из текущих элементов двух списков.
4. Добавление оставшихся элементов
merged_list.extend(list1[i:])
merged_list.extend(list2[j:])
После завершения цикла while, один из списков может быть полностью обработан, а в другом могут остаться элементы. Эти строки добавляют все оставшиеся элементы в merged_list:
list1[i:]— оставшиеся элементы изlist1, начиная с позицииi.list2[j:]— оставшиеся элементы изlist2, начиная с позицииj.
5. Возврат результата
return merged_list
Функция возвращает окончательный список merged_list, который является отсортированным объединением двух входных списков.
Примеры работы функции
- Пример 1:
- Вход:
list1 = [1, 2, 4],list2 = [1, 3, 4]. - Процесс:
- Сравниваются
1и1, добавляется1изlist1. - Сравниваются
2и1, добавляется1изlist2. - Сравниваются
2и3, добавляется2изlist1. - Сравниваются
4и3, добавляется3изlist2. - Добавляются оставшиеся элементы:
4изlist1и4изlist2.
- Сравниваются
- Выход:
[1, 1, 2, 3, 4, 4].
- Вход:
- Пример 2:
- Вход:
list1 = [],list2 = []. - Процесс:
- Оба списка пусты, поэтому сразу возвращается пустой список.
- Выход:
[].
- Вход:
- Пример 3:
- Вход:
list1 = [],list2 = [0]. - Процесс:
list1пуст, поэтому добавляется весьlist2.
- Выход:
[0].
- Вход:
DeaglenS
,def merge_two_lists(list1, list2):
return sorted(list1 + list2)
admin
,DeaglenS, Вот и абстракции подъехали)