¿Es posible hacer esto en una línea en Python?
if <condition>:
myList.append('myString')
He probado el operador ternario:
myList.append('myString' if <condition>)
pero a mi IDE ( MyEclipse ) no le gustó, sin un else
.
¿Es posible hacer esto en una línea en Python?
if <condition>:
myList.append('myString')
He probado el operador ternario:
myList.append('myString' if <condition>)
pero a mi IDE ( MyEclipse ) no le gustó, sin un else
.
Respuestas:
Sí, usted puede hacer esto:
<condition> and myList.append('myString')
Si <condition>
es falso, entonces se activará el cortocircuito y no se evaluará el lado derecho. Si <condition>
es verdadero, se evaluará el lado derecho y se agregará el elemento.
Solo señalaré que hacer lo anterior es bastante no pitónico, y probablemente sea mejor escribir esto, independientemente:
if <condition>: myList.append('myString')
Demostración:
>>> myList = []
>>> False and myList.append('myString')
False
>>> myList
[]
>>> True and myList.append('myString')
>>> myList
['myString']
E701 multiple statements on one line
por lo que también no es pitónico ...;)
x = object.get('attribute')
en ese caso
La razón por la que el idioma no te permite usar la sintaxis
variable = "something" if a_condition
sin else
es eso, en el caso donde a_condition == False
, de variable
repente se desconoce. Tal vez podría ser predeterminado None
, pero Python requiere que todas las asignaciones de variables realmente resulten en asignaciones explícitas. Esto también se aplica a casos como la llamada a la función, ya que el valor pasado a la función se evalúa como lo sería el RHS de una instrucción de asignación.
De manera similar, todos los return
s deben retornar realmente, incluso si son return
s condicionales . P.ej:
return variable if a_condition
no está permitido, pero
return variable if a_condition else None
está permitido, ya que se garantiza que el segundo ejemplo devolverá algo explícitamente.
variable=None
es perfectamente legal. : D
continue if i == 0
en un bucle for.
else pass?
else pass
no funciona porque la expresión ternaria debe devolver un valor al que se puede pasar return
. pass
no es un return
valor válido .
if a_condition: variable = "something"
y if a_condition: return variable
son legales. Entonces, es esencialmente una elección sintáctica arbitraria de Python.
if <condition>: myList.append('myString')
De otra manera no. ¿Por qué la necesidad de ponerlo en una línea?
Tenga en cuenta que el "operador ternario" es un operador . Como cualquier operador, debe devolver algo , entonces, ¿cómo puede tener un operador ternario sin la else
cláusula? ¿Qué se supone que debe devolver si la condición no es verdadera?
Básicamente, estás pidiendo una do_thing() if <condition> else pass
construcción (que se lanzará SyntaxError
, si se ejecuta). Como descubrí durante la investigación, una pregunta (algo) similardo_thing() if condition else None
es lo más cercana posible (que es solo otra forma de hacerlo <condition> and do_thing()
). Entonces, para resumir esta idea y otras respuestas, estas son sus opciones:
if <condition>: myList.append('myString')
- parece ser la forma menos 'hacky' (y por lo tanto preferida)<condition> and myList.append('myString')
myList.append('myString') if <condition> else None
myList.extend(['myString'] if condition else [])
también funcionaría, aunque es más trabajo que las otras soluciones.
Puedes hacer algo como esto:
myList.append('myString') if <condition> else False
o
myList.append('myString') if <condition> else 0
myList.append('myString') if True else _
Pero si no estás asignando nada, no importa. Sin embargo, me preocupa que esta persona intente una lista de comprensión con una lógica similar.
Solo haría esto si quiero agregar elementos opcionales a una lista basada en una condición.
nums = [
1,
2,
3 if <condition> else None,
4,
]
nums = [i for i in nums if i is not None]
esto simplemente reemplaza el valor con Ninguno si no se cumple la condición y luego, simplemente redefine la lista sin los Valores Ninguno. de esta manera conservan su índice si se cumple la condición