py_shadow_merge · Python
▶ Aprender py_shadow_merge (Python) paso a paso · explicación de py_shadow_merge
Código línea a línea
Tres columnas: el código, el trozo del subject o del main que obliga a escribir esa línea, y el por qué.
py_shadow_merge.py
| Código | Subject | Por qué |
|---|---|---|
def shadow_merge(list1: list[int], list2: list[int]) -> list[int]: | def shadow_merge(list1: list[int], list2: list[int]) -> list[int]: | Firma del subject. |
merged = [] | into one sorted list | Lista nueva: no toco las de entrada. |
i = j = 0 | Un puntero por lista. | |
while i < len(list1) and j < len(list2): | merges two sorted lists | Mientras queden elementos en las dos, comparo cabezas. |
if list2[j] < list1[i]: | La de la segunda es menor: va ella. | |
merged.append(list2[j]) | La añado. | |
j += 1 | Avanzo su puntero. | |
else: | Menor o igual: la primera. En empate sale antes la de list1, da igual para enteros pero es la convención estable. | |
merged.append(list1[i]) | La añado. | |
i += 1 | Avanzo. | |
merged.extend(list1[i:]) | shadow_merge([], [1,2,3]) => [1,2,3] | Lo que sobre de una lista ya está ordenado y es mayor que todo lo anterior: va tal cual. Si una lista estaba vacía, el while no entra y esto lo hace todo. |
merged.extend(list2[j:]) | Solo una de las dos tendrá resto. | |
return merged | Ordenada. |