Los métodos para las listas en Python

Un método es lo mismo que una función, excepto que se «llama» a un valor. Por ejemplo, si una lista fuera almacenado en spam, usted llamaría al método de lista index() (que se explicará en breve) en esa lista así: spam.index('hello'). La parte del método viene después del valor, separada por un punto.

Cada tipo de datos tiene su propio conjunto de métodos. El tipo de datos lista, por ejemplo, tiene varios métodos útiles para encontrar, añadir, eliminar y manipular valores en una lista.

Encontrar un valor en una lista con el método index()

las listas tienen un método index() al que se le puede pasar un valor, y si ese valor existe en la lista, se devuelve el índice del valor. Si el valor no está en la lista, entonces Python produce un error ValueError. Introduzca lo siguiente en el shell interactivo:

>>> spam = ['hello', 'hi', 'howdy', 'heyas']
>>> spam.index('hello')
0
>>> spam.index('heyas')
3
>>> spam.index('howdy howdy howdy')
Traceback (most recent call last):
  File "<pyshell#31>", line 1, in <module>
    spam.index('howdy howdy howdy')
ValueError: 'howdy howdy howdy' is not in list

Cuando hay duplicados del valor en la lista, se devuelve el índice de su primera aparición. Introduzca lo siguiente en el shell interactivo, y observe que index() devuelve 1, no 3:

>>> spam = ['Zophie', 'Pooka', 'Fat-tail', 'Pooka']
>>> spam.index('Pooka')
1

Añadir valores a las listas con los métodos append() e insert()

Para añadir nuevos valores a una lista, utilice los métodos append() e insert(). Introduzca lo siguiente en el shell interactivo para llamar al método append() sobre una lista almacenada en la variable spam:

>>> spam = ['cat', 'dog', 'bat']
>>> spam.append('moose')
>>> spam
['cat', 'dog', 'bat', 'moose']

La anterior llamada al método append() añade el argumento al final de la lista. El método insert() puede insertar un valor en cualquier índice de la lista. El primer argumento de insert() es el índice para el nuevo valor, y el segundo argumento es el nuevo valor a insertar. Introduzca lo siguiente en el shell interactivo:

>>> spam = ['cat', 'dog', 'bat']
>>> spam.insert(1, 'chicken')
>>> spam
['cat', 'chicken', 'dog', 'bat']

Observa que el código es spam.append('moose') y spam.insert(1, 'chicken'), no spam = spam.append('moose') y spam = spam.insert(1, 'chicken'). Ni append() ni insert() dan el nuevo valor de spam como valor de retorno. (De hecho, el valor de retorno de append() e insert() es None, por lo que definitivamente no querrás almacenarlo como el nuevo valor de la variable). Más bien, la lista se modifica en su lugar.

Los métodos pertenecen a un solo tipo de datos. Los métodos append() e insert() son métodos de lista y sólo pueden llamarse a valores de lista, no a otros valores como cadenas o enteros. Introduzca lo siguiente en el intérprete de comandos interactivo, y observe los mensajes de error AttributeError que aparecen:

>>> eggs = 'hello'
>>> eggs.append('world')
Traceback (most recent call last):
  File "<pyshell#19>", line 1, in <module>
    eggs.append('world')
AttributeError: 'str' object has no attribute 'append'
>>> bacon = 42
>>> bacon.insert(1, 'world')
Traceback (most recent call last):
  File "<pyshell#22>", line 1, in <module>
    bacon.insert(1, 'world')
AttributeError: 'int' object has no attribute 'insert'

Eliminar elementos de una lista con el método remove()

Al método remove() se le pasa el valor a eliminar de la lista a la que se llama. Introduzca lo siguiente en el shell interactivo:

>>> spam = ['cat', 'bat', 'rat', 'elephant']
>>> spam.remove('bat')
>>> spam
['cat', 'rat', 'elephant']

Si se intenta eliminar un valor que no existe en la lista, se producirá un error ValueError. Por ejemplo, introduzca lo siguiente en el intérprete de comandos interactivo y observe el error que se muestra:

>>> spam = ['cat', 'bat', 'rat', 'elephant']
>>> spam.remove('chicken')
Traceback (most recent call last):
  File "<pyshell#11>", line 1, in <module>
    spam.remove('chicken')
ValueError: list.remove(x): x not in list

Si el valor aparece varias veces en la lista, sólo se eliminará la primera instancia del valor. Introduzca lo siguiente en el shell interactivo:

>>> spam = ['cat', 'bat', 'rat', 'cat', 'hat', 'cat']
>>> spam.remove('cat')
>>> spam
['bat', 'rat', 'cat', 'hat', 'cat']

La sentencia del es buena para usar cuando se conoce el índice del valor que se quiere eliminar de la lista. El método remove() es útil cuando se conoce el valor que se quiere eliminar de la lista.

Ordenar los valores de una lista con el método sort()

Las listas de valores numéricos o las listas de cadenas pueden ordenarse con el método sort(). Por ejemplo, introduzca lo siguiente en el shell interactivo:

>>> spam = [2, 5, 3.14, 1, -7]
>>> spam.sort()
>>> spam
[-7, 1, 2, 3.14, 5]
>>> spam = ['ants', 'cats', 'dogs', 'badgers', 'elephants']
>>> spam.sort()
>>> spam
['ants', 'badgers', 'cats', 'dogs', 'elephants']

También puede pasar True para el argumento de la palabra clave reverse para que sort() ordene los valores en orden inverso. Introduzca lo siguiente en el intérprete de comandos interactivo:

>>> spam.sort(reverse=True)
>>> spam
['elephants', 'dogs', 'cats', 'badgers', 'ants']

Hay tres cosas que debes tener en cuenta sobre el método sort(). En primer lugar, el método sort() ordena la lista en su lugar; no intentes capturar el valor de retorno escribiendo código como spam = spam.sort().

En segundo lugar, no puedes ordenar listas que tengan tanto valores numéricos como valores de cadena, ya que Python no sabe cómo comparar estos valores. Introduzca lo siguiente en el intérprete de comandos interactivo y observe el error TypeError:

>>> spam = [1, 3, 2, 4, 'Alice', 'Bob']
>>> spam.sort()
Traceback (most recent call last):
  File "<pyshell#70>", line 1, in <module>
    spam.sort()
TypeError: '<' not supported between instances of 'str' and 'int'

En tercer lugar, sort() utiliza el «orden ASCIIbético» en lugar del orden alfabético real para ordenar las cadenas. Esto significa que las letras mayúsculas van antes que las minúsculas. Por lo tanto, la 'a' minúscula se ordena de manera que viene después de la 'Z' mayúscula. Para un ejemplo, introduzca lo siguiente en el intérprete de comandos interactivo:

>>> spam = ['Alice', 'ants', 'Bob', 'badgers', 'Carol', 'cats']
>>> spam.sort()
>>> spam
['Alice', 'Bob', 'Carol', 'ants', 'badgers', 'cats']

Si necesitas ordenar los valores en orden alfabético normal, pasa str.lower como argumento clave en la llamada al método sort().

>>> spam = ['a', 'z', 'A', 'Z']
>>> spam.sort(key=str.lower)
>>> spam
['a', 'A', 'z', 'Z']

Esto hace que la función sort() trate todos los elementos de la lista como si estuvieran en minúsculas sin cambiar realmente los valores de la lista.

Invertir los valores de una lista con el método reverse()

Si necesita invertir rápidamente el orden de los elementos de una lista, puede llamar al método de lista reverse(). Introduzca lo siguiente en el shell interactivo:

>>> spam = ['cat', 'dog', 'moose']
>>> spam.reverse()
>>> spam
['moose', 'dog', 'cat']

Deja una respuesta