Funciones que reciben listas o diccionarios
Tantos las listas como los diccionarios son tipos de datos mutables, por lo tanto cuando la pasamos como parámetros a una función al cambiar el parámetro formal podemos estar cambiando el parámetro real.
Por tanto al trabajar con listas o diccionarios como parámetro de funciones, podemos hacer dos versiones de estas funciones:
- Una función que modifica la lista o el diccionario. Estas funciones no tienen
return
, por lo que no devuelve nada (None
). - Una función que no modifica la lista o diccionario original, y que devuelven una nueva lista o diccionario modificado. Estas funciones si tienen que tener
return
para devolver la lista o diccionario modificado.
Ejemplo 1: Función que recibe una lista y la modifica
Vamos a hacer una función que elimine todas las apariciones de una lista, modificando la lista original:
def eliminar_elemento_lista(lista,elem):
while elem in lista:
lista.remove(elem)
En el programa principal creamos una lista, y vemos que cuando usamos la función la lista se modifica:
milista = [2,4,5,2,3]
eliminar_elemento_lista(milista,2)
print(milista)
El resultado de este programa será:
[4,5,3]
La lista milista
se ha modificado.
Ejemplo 2: Función que recibe una lista y devuelve otra lista modificada
Vamos a hacer una función que elimine todas las apariciones de una lista, pero no modifica la lista original, devuelve otra lista con los elementos eliminados:
def eliminar_elemento_lista(lista,elem):
aux=lista.copy()
while elem in aux:
aux.remove(elem)
return aux
En el programa principal creamos una lista, y vemos que cuando usamos la función la lista original no se modifica, y necesitamos otra variable para guardar la lista modificada.
milista = [2,4,5,2,3]
otralista=eliminar_elemento_lista(milista,2)
print(otralista)
print(milista)
El resultado de este programa será:
[4,5,3]
[2,4,5,2,3]
La lista milista
no se ha modificado, en la lista otralista
tenemos el resultado de eliminar el elemento en la lista orginal.