Problema: ¿Cómo realizar asignaciones condicionales if de una línea en Python?
Ejemplo: Digamos que empiezas con el siguiente código.
x = 2boo = True
Quieres establecer el valor de x
a 42
si boo
es True
, y no hacer nada en caso contrario.
Vamos a profundizar en las diferentes formas de lograr esto en Python. Empezamos con un resumen:
Ejercicio: Ejecuta el código. ¿Son todas las salidas iguales?
A continuación, te sumergirás en cada uno de esos métodos y aumentarás tu superpoder de una sola línea!
Tabla de contenidos
Método 1: Operador ternario
El operador ternario más básico x if c else y
devuelve la expresión x
si la expresión booleana c
evalúa a True
. En caso contrario, si la expresión c
se evalúa como False
, el operador ternario devuelve la expresión alternativa y
.
<OnTrue> if <Condition> else <OnFalse>
Operando | Descripción |
---|---|
<EnCierto> | La expresión de retorno del operador en caso de que la condición evalúa True |
<Condición> | La condición que determina si se devuelve la rama <En Verdadero> o la rama <En Falso>. |
<EnFalso> | La expresión de retorno del operador en caso de que la condición evalúe False |
¡Volvamos a nuestro problema de ejemplo! Quieres establecer el valor de x
a 42
si boo
es True
, y no hacer nada en caso contrario. He aquí cómo hacer esto en una sola línea:
x = 42 if boo else x
Si bien el uso del operador ternario funciona, te preguntarás si es posible evitar la parte ...else x
para mayor claridad del código. En el siguiente método, aprenderás cómo hacerlo.
Si necesitas mejorar tu comprensión del operador ternario, mira el siguiente vídeo:
También puedes leer el artículo relacionado:
- Python One Line Ternary
Método 2: Declaración If de una sola línea
Al igual que en el método anterior, quieres establecer el valor de x
a 42
si boo
es True
, y no hacer nada en caso contrario. Pero no quieres tener una rama else redundante. ¿Cómo hacer esto en Python?
La solución para omitir la parte else del operador ternario es sorprendentemente sencilla-utiliza una sentencia if estándar sin rama else y escríbela en una sola línea de código:
if boo: x = 42
Para saber más sobre lo que puedes empaquetar en una sola línea, mira mi vídeo tutorial «If-Then-Else in One Line Python»:
Método 3: Sintaxis de tupla ternaria Hack
Una forma abreviada del operador ternario es la siguiente sintaxis de tupla.
Sintaxis: Puede utilizar la sintaxis de tupla (x, y)
que consiste en una tupla (x, y)
y una condición c
encerrada entre corchetes. He aquí una forma más intuitiva de representar esta sintaxis de tupla.
(<OnFalse>, <OnTrue>)
Operando | Descripción |
---|---|
<OnTrue> | La expresión de retorno del operador en caso de que la condición evalúa True |
<Condición> | La condición que determina si se devuelve la rama <En Verdadero> o la rama <En Falso>. |
<EnFalso> | La expresión de retorno del operador en caso de que la condición evalúe False |
De hecho, el orden de los operandos <OnFalse>
y <OnTrue>
se invierte en comparación con el operador ternario básico. Primero, tienes la rama que se devuelve si la condición NO se cumple. En segundo lugar, se ejecuta la rama que se devuelve si la condición se mantiene.
x = (x, 42)
¡Inteligente! La condición boo
se mantiene por lo que el valor de retorno pasado a la variable x
es la rama <OnTrue>
42
.
No te preocupes si esto te confunde-no eres el único. Puedes aclarar la sintaxis de la tupla de una vez por todas estudiando mi detallado artículo del blog.
Artículo relacionado: Python Ternary – Tuple Syntax Hack
Libro Python One-Liners
Los programadores de Python mejorarán sus habilidades informáticas con estos útiles one-liners.
Python One-Liners te enseñará a leer y escribir «one-liners»: declaraciones concisas de funcionalidad útil empaquetadas en una sola línea de código. Aprenderá a desentrañar y comprender sistemáticamente cualquier línea de código Python, y a escribir un Python elocuente y poderosamente comprimido como un experto.
Los cinco capítulos del libro cubren consejos y trucos, expresiones regulares, aprendizaje automático, temas básicos de la ciencia de datos y algoritmos útiles. Las explicaciones detalladas de las expresiones regulares introducen conceptos clave de las ciencias de la computación y potencian sus habilidades de codificación y análisis. Aprenderá sobre las características avanzadas de Python, como la comprensión de listas, los cortes, las funciones lambda, las expresiones regulares, las funciones map y reduce y las asignaciones de cortes. También aprenderá a:
– Aprovechar las estructuras de datos para resolver problemas del mundo real, como utilizar la indexación booleana para encontrar ciudades con una contaminación superior a la media
– Utilizar los fundamentos de NumPy como array, shape, axis, type, broadcasting, indexación avanzada, slicing, sorting, searching, aggregating, and statistics
– Calcular estadísticas básicas de arrays de datos multidimensionales y los algoritmos K-Means para el aprendizaje no supervisado
– Crear expresiones regulares más avanzadas utilizando grouping y named groups, lookaheads negativos, caracteres escapados, espacios en blanco, conjuntos de caracteres (y conjuntos de caracteres negativos), y operadores codiciosos/no codiciosos
– Comprender una amplia gama de temas de informática, incluyendo anagramas, palíndromos, superconjuntos, permutaciones factoriales, números primos, números de Fibonacci, ofuscación, búsqueda y ordenación algorítmica
Al final del libro, sabrá cómo escribir Python en su forma más refinada, y crear piezas concisas y hermosas de «arte Python» en una sola línea.
¡Obtenga su Python One-Liners ahora!
Mientras trabajaba como investigador en sistemas distribuidos, el Dr. Christian Mayer encontró su amor por enseñar a los estudiantes de ciencias de la computación.
Para ayudar a los estudiantes a alcanzar mayores niveles de éxito en Python, fundó el sitio web de educación de programación Finxter.com. Es autor del popular libro de programación Python One-Liners (NoStarch 2020), coautor de la serie Coffee Break Python de libros autopublicados, entusiasta de las ciencias de la computación, trabajador independiente y propietario de uno de los 10 blogs de Python más grandes del mundo.
Sus pasiones son escribir, leer y codificar. Pero su mayor pasión es servir a los aspirantes a codificadores a través de Finxter y ayudarles a potenciar sus habilidades. Puedes unirte a su academia de correo electrónico gratuito aquí.