Pregunta ¿Cómo obtener la cantidad de elementos en una lista en Python?


items = []
items.append("apple")
items.append("orange")
items.append("banana")

# FAKE METHOD::
items.amount()  # Should return 3

¿Cómo obtengo la cantidad de elementos en la lista?


1530
2017-11-11 00:30


origen


Respuestas:


los len() función se puede utilizar con muchos tipos en Pitón - tanto tipos incorporados como tipos de biblioteca.

>>> len([1,2,3])
3

2125
2017-11-11 00:33



¿Cómo obtener el tamaño de una lista?

Para encontrar el tamaño de una lista, use la función incorporada, len:

items = []
items.append("apple")
items.append("orange")
items.append("banana")

Y ahora:

len(items)

devuelve 3.

Explicación

Todo en Python es un objeto, incluidas las listas. Todos los objetos tienen un encabezado de algún tipo en la implementación de C.

Las listas y otros objetos integrados similares con un "tamaño" en Python, en particular, tienen un atributo llamado ob_size, donde se almacena el número de elementos en el objeto. Entonces, verificar el número de objetos en una lista es muy rápido.

Pero si está comprobando si el tamaño de la lista es cero o no, no use len - en cambio, poner la lista en un contexto booleano - se trata como False si está vacío, de lo contrario es True.

Desde el documentos

len(s)

Devuelve la longitud (el número de elementos) de un objeto. El argumento puede ser una secuencia (como una cadena, bytes, tupla, lista o rango) o   una colección (como un diccionario, conjunto o conjunto congelado).

len se implementa con __len__, del modelo de datos documentos:

object.__len__(self)

Llamado para implementar la función incorporada len(). Debe devolver la longitud del objeto, un entero> = 0. Además, un objeto que no lo hace   definir un __nonzero__() [en Python 2 o __bool__() en Python 3] método y cuyo __len__() método devuelve cero   se considera falso en un contexto booleano.

Y también podemos ver eso __len__ es un método de listas:

items.__len__()

devuelve 3.

Tipos integrados que puede obtener len (longitud de

Y, de hecho, vemos que podemos obtener esta información para todos los tipos descritos:

>>> all(hasattr(cls, '__len__') for cls in (str, bytes, tuple, list, 
                                            xrange, dict, set, frozenset))
True

No utilice len para probar una lista vacía o no vacía

Para probar una longitud específica, por supuesto, simplemente prueba la igualdad:

if len(items) == required_length:
    ...

Pero hay un caso especial para probar una lista de longitud cero o la inversa. En ese caso, no pruebes la igualdad.

Además, no hagas:

if len(items): 
    ...

En cambio, simplemente hazlo:

if items:     # Then we have some items, not empty!
    ...

o

if not items: # Then we have an empty list!
    ...

yo explica por qué aquí pero en resumen, if items o if not items es más legible y más eficiente.


136
2017-11-25 21:51



Si bien esto puede no ser útil debido al hecho de que tendría mucho más sentido como funcionalidad "lista para usar", un truco bastante simple sería construir una clase con una length propiedad:

class slist(list):
    @property
    def length(self):
        return len(self)

Puedes usarlo así:

>>> l = slist(range(10))
>>> l.length
10
>>> print l
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Esencialmente, es exactamente idéntico a un objeto de lista, con el beneficio adicional de tener un amigable para el OOP length propiedad.

Como siempre, su millaje puede variar.


64
2018-04-19 21:51



Además len también puedes usar operator.length_hint (requiere Python 3.4+). Para normal list ambos son equivalentes pero length_hint hace posible obtener la longitud de un iterador de lista, que podría ser útil en ciertas circunstancias:

>>> from operator import length_hint
>>> l = ["apple", "orange", "banana"]
>>> len(l)
3
>>> length_hint(l)
3

>>> list_iterator = iter(l)
>>> len(list_iterator)
TypeError: object of type 'list_iterator' has no len()
>>> length_hint(list_iterator)
3

Pero length_hint es, por definición, solo una "pista", por lo que la mayoría de las veces len es mejor.

He visto varias respuestas que sugieren el acceso __len__. Esto está bien cuando se trata de clases integradas como list pero podría provocar problemas con las clases personalizadas porque len (y length_hint) implementar algunas verificaciones de seguridad. Por ejemplo, ambos no permiten longitudes o longitudes negativas que excedan un cierto valor (el sys.maxsize valor). Entonces, siempre es más seguro usar el len función en lugar de la __len__ método!


9
2018-04-07 19:03



Respondiendo a su pregunta como los ejemplos también dados previamente:

items = []
items.append("apple")
items.append("orange")
items.append("banana")

print items.__len__()

6
2017-07-14 08:36



Y para completar (tomar uno para el equipo con los votos a favor), es posible sin usar el len() función (no aprobaría esto como una buena opción):

def count(list):
  item_count = 0
  for item in list[:]:
    item_count = item_count + 1
  return item_count

count([1,2,3,4,5])

(el colon en list[:] está implícito, por lo tanto, también es opcional)


-1
2017-12-06 18:14