Tratando de pasar una lista en Python a través de una función que he definido, sin embargo, cuando ejecuto el código obtengo 'Ninguno' como resultado.

Para la reproducibilidad, usaré un ejemplo simple en el que quiero poner todas las palabras en una cadena en mayúsculas.

def upcase(x):
    print(x.upper())

upcase("word")

Esto por supuesto da:

WORD

Pero ahora, si intento aplicar mi función a una cadena completa, como en el siguiente:

randoms = ['chicken', 'window', 'carpet', 'lampshade', 'crosswalk']

randoms_upcased = [upcase(x) for x in randoms]
print(randoms)
print(randoms_upcased)

Entiendo:

CHICKEN
WINDOW
CARPET
LAMPSHADE
CROSSWALK
['chicken', 'window', 'carpet', 'lampshade', 'crosswalk']
[None, None, None, None, None]

Mientras que la salida que deseo es esta.

['chicken', 'window', 'carpet', 'lampshade', 'crosswalk']
['CHICKEN', 'WINDOW', 'CARPET', 'LAMPSHADE', 'CROSSWALK']

Es posible? Cualquier ayuda recibida con gratitud.

1
jimiclapton 30 abr. 2020 a las 00:42

4 respuestas

La mejor respuesta

Su función de mayúsculas imprime el resultado, pero no devuelve nada. Como no está especificando un valor de retorno, el valor predeterminado es devolver None. Querrás agregar un retorno explícito:

def upcase(x):
    x = x.upper()
    print(x)
    return x
6
water_ghosts 29 abr. 2020 a las 21:46

Debe devolver la cadena que está imprimiendo.

Esto debería funcionar:

def upcase(x):
    return (x.upper())
1
Nandu Raj 30 abr. 2020 a las 08:06

El primer resultado de la tienda en otra lista (z) luego devuelve (z) en la función:

def upcase(x):
    z = ([y.upper() for y in x])
    return z
l1 = ['chicken', 'window', 'carpet', 'lampshade', 'crosswalk']
upcase(l1)

Salida:

['CHICKEN', 'WINDOW', 'CARPET', 'LAMPSHADE', 'CROSSWALK']
2
Vishal Upadhyay 29 abr. 2020 a las 21:55

Creo que es porque la función mayúscula (s) está hecha para imprimir la cadena s en mayúscula pero no devuelve nada. Debería funcionar si devuelve la cadena en mayúscula de la función.

2
sponge 29 abr. 2020 a las 21:47