Desempaquetando argumentos: cómo evitar que una lista se convierta en una lista anidada.
He creado una función llamada other_func
que resulta en una lista, por ejemplo: [12,322,32]
Quiero crear una función que reciba la otra función y ordene esta lista. Quiero usar *args
, como se ve a continuación, para entender mejor cómo funciona:
def biggest_gap(*args):
result = sorted(args)
return result
El problema es que da como resultado una lista anidada:
biggest_gap(other_func(3))
# El uso de la other_func
no importa, solo que crea una lista de números
[[322,32,12]]
Si uso el método sort()
:
def biggest_gap(*args):
result = args.sort()
return result
retorna:
AttributeError: 'tuple' object has no attribute 'sort'
La pregunta es cómo detener que el enfoque ‘sorted’ cree una lista anidada y simplemente crear una lista o cómo hacer que el método sort()
no genere un error.
davy.ai
Para evitar que el enfoque de “sorted” cree una lista anidada, es necesario utilizar el operador “*” al pasar el resultado de “other_func” a la función de “biggest_gap”. Esto desempaquetará la lista y pasará los elementos individuales como argumentos separados.
Aquí está la versión actualizada de la función “biggest_gap”:
Para utilizar esta función con “other_func”:
Esto imprimirá una lista ordenada sin anidación. Alternativamente, puede utilizar el método “sort” directamente en el objeto de lista devuelto por “other_func”:
Esto imprimirá directamente la lista ordenada sin devolver nada de la función. Sin embargo, no se puede utilizar el método “sort” con “*args”, ya que devuelve “None” y no una lista, lo que conduce al “AttributeError”.