2.3 Listas en Python: indexación, rebanado (slicing) y métodos

Enunciado del ejercicio

1. Naturaleza mutable, creación e indexación de listas Las listas son secuencias mutables y heterogéneas indexadas desde cero: \(\text{lista} = [x_0, x_1, x_2, \dots, x_{n-1}], \quad \text{índices negativos: } [-n, \dots, -1]\) Ejemplo: Para acceder al primer y último elemento de una serie de tamaños de partícula: \(\text{tamanos} = [2.5, 4.0, 7.2, 11.8]\) \(\text{primero} = \text{tamanos}[0]; \text{ultimo} = \text{tamanos}[-1]\) 2. Rebanado de listas (slicing) y subintervalos La sintaxis lista[inicio:fin:paso] extrae una nueva sublista desde inicio hasta fin-1 con el incremento especificado: \(\text{lista}[a:b:s] \quad \longrightarrow \quad \text{elementos en índices } a, a+s, a+2s, \dots < b\) Ejemplo: Para extraer cada dos puntos de una serie espectral o invertir el orden de los datos: \(\text{submuestreo} = \text{datos}[::2] \quad \text{y} \quad \text{invertida} = \text{datos}[::-1]\) 3. Métodos dinámicos de inserción y extracción Las listas crecen o disminuyen dinámicamente mediante métodos in situ: \(\text{append(x)}, \quad \text{extend(iterable)}, \quad \text{insert(i, x)}, \quad \text{pop(i)}, \quad \text{remove(x)}\) Ejemplo: Para registrar una nueva lectura de absorbancia al final del experimento: \(\text{lecturas.append}(0.452)\) 4. Funciones de agregación matemática y ordenación Python proporciona funciones nativas de alto rendimiento sobre listas numéricas: \(\text{len(L)}, \quad \text{sum(L)}, \quad \text{min(L)}, \quad \text{max(L)}, \quad \text{sorted(L)} \quad \text{y el método in situ } \text{L.sort()}\) Ejemplo: Para calcular la media aritmética de una serie de potenciales: \(\text{media} = \text{sum}(\text{voltajes}) / \text{len}(\text{voltajes})\) Ejemplo 1: Registro cronológico de temperaturas de recocido térmico con append() y cálculo de magnitudes estadísticas.

PASO 1

Creación de la lista vacía y registro progresivo.

Simulamos el almacenamiento de lecturas de pirómetro:

$$\text{temps} = []$$
$$\text{temps.append}(450.2); \text{temps.append}(455.8); \text{temps.append}(448.5)$$
PASO 2

Evaluación de magnitudes estadísticas fundamentales.

Calculamos la media y el rango térmico:

$$\text{media_t} = \text{sum}(\text{temps}) / \text{len}(\text{temps})$$
$$\text{rango_t} = \text{max}(\text{temps}) - \text{min}(\text{temps})$$
Conclusión

Para la serie registrada, la temperatura media es 451.50 °C con un rango de oscilación de 7.30 °C.

Ejemplo 2:

Extracción de una ventana espectral de resonancia plasmónica mediante slicing.

PASO 1

Lista de longitudes de onda en nanómetros.

Definimos la cuadrícula espectral de 400 a 700 nm en pasos de 50 nm:

$$\text{espectro} = [400, 450, 500, 550, 600, 650, 700]$$
PASO 2

Extracción del rango plasmónico centrado entre 500 y 600 nm.

Empleamos slicing delimitando los índices de interés [2:5]:

$$\text{zona_plasmon} = \text{espectro}[2:5]$$
Conclusión

La sublista extraída contiene exactamente los tres puntos espectrales clave [500, 550, 600] nm.

Ejemplo 3:

Fusión y ordenación de listas de picos de difracción de rayos X procedentes de dos detectores.

PASO 1

Listas independientes de ángulos 2-theta medidos.

Declaramos los ángulos de dos canales de detección:

$$\text{picos_canal1} = [28.4, 47.3, 56.1]$$
$$\text{picos_canal2} = [15.2, 32.8, 68.9]$$
PASO 2

Combinación y ordenación ascendente.

Concatenamos las dos listas y ordenamos in situ:

$$\text{todos_picos} = \text{picos_canal1} + \text{picos_canal2}$$
$$\text{todos_picos.sort}()$$
Conclusión

La lista unificada y ordenada resultante es [15.2, 28.4, 32.8, 47.3, 56.1, 68.9] grados.

Ejemplo 4:

Depuración de lecturas corruptas con remove() y extracción de puntos de referencia con pop().

PASO 1

Lista de mediciones con valores espurios y marcas testigo.

Definimos la serie experimental:

$$\text{datos} = [0.0, 15.4, -999.0, 18.2, 21.0, 999.0]$$
PASO 2

Eliminación selectiva del valor erróneo y extracción del último punto.

Limpiamos la lista in situ:

$$\text{datos.remove}(-999.0)$$
$$\text{testigo_final} = \text{datos.pop}()$$
Conclusión

La lista depurada queda con cuatro mediciones útiles y el testigo extraído preservado por separado.

Ejemplo 5:

Inversión temporal de un ciclo de histéresis magnética mediante slicing inverso [::-1].

PASO 1

Rampa de magnetización de ida (0 a +2 Tesla).

Asignamos los campos de la curva de magnetización inicial:

$$\text{campo_ida} = [0.0, 0.5, 1.0, 1.5, 2.0]$$
PASO 2

Generación simétrica de la rama de retorno con paso negativo.

Invertimos la secuencia con slicing con paso -1:

$$\text{campo_retorno} = \text{campo_ida}[::-1]$$
Conclusión

La rama de retorno generada es [2.0, 1.5, 1.0, 0.5, 0.0] Tesla, completando el ciclo magnético.