Reemplazo de lista de Python con lógica booleana condicional
Dada una lista de valores, es posible que desee reemplazar selectivamente elementos específicos con Ninguno en función de un condición. La condición, definida por una función condition(), puede determinar si se reemplaza un elemento en función de su valor. Esta pregunta explora diferentes formas de lograr este reemplazo en Python y al mismo tiempo proporciona una condición de ejemplo que reemplaza elementos impares.
Solución 1: comprensión de listas
La forma más eficiente Realizar este reemplazo es utilizar una lista por comprensión. Este enfoque genera una nueva lista, preservando el orden original mientras reemplaza los elementos coincidentes:
new_items = [x if x % 2 else None for x in items]
En este ejemplo, los elementos divisibles por 2 (números pares) se conservan, mientras que los números impares se reemplazan por Ninguno.
Solución 2: modificación in situ
Como alternativa, puede modificar el lista original directamente. Sin embargo, este enfoque es marginalmente menos eficiente:
for index, item in enumerate(items):
if not (item % 2):
items[index] = None
Este método itera sobre la lista y reemplaza los elementos impares con Ninguno in situ.
Análisis de complejidad del tiempo
Ambas soluciones tienen una complejidad de tiempo lineal de O(n), lo que indica que su tiempo de ejecución aumenta proporcionalmente con el número de elementos en la lista.
Parámetros de rendimiento
Rendimiento Los puntos de referencia muestran diferencias insignificantes entre las dos soluciones. Sin embargo, para listas grandes, la comprensión de la lista es un poco más rápida.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3