En Python , ¿es la siguiente la única forma de obtener la cantidad de elementos?
arr.__len__()
Si es así, ¿por qué la sintaxis extraña?
my_list = [1,2,3,4,5]
len(my_list)
# 5
Lo mismo funciona para las tuplas:
my_tuple = (1,2,3,4,5)
len(my_tuple)
# 5
Y cadenas, que en realidad son solo matrices de caracteres:
my_string = 'hello world'
len(my_string)
# 11
Se hizo intencionalmente de esta manera para que las listas, las tuplas y otros tipos de contenedores o iterables no necesitaran implementar explícitamente un .length()
método público , sino que simplemente puede verificar len()
cualquier cosa que implemente el __len__()
método 'mágico' .
Claro, esto puede parecer redundante, pero las implementaciones de verificación de longitud pueden variar considerablemente, incluso dentro del mismo idioma. No es raro ver que un tipo de colección use un .length()
método mientras que otro tipo usa una .length
propiedad, mientras que otro usa .count()
. Tener una palabra clave a nivel de idioma unifica el punto de entrada para todos estos tipos. Por lo tanto, incluso los objetos que no consideres como listas de elementos aún podrían verificarse por longitud. Esto incluye cadenas, colas, árboles, etc.
La naturaleza funcional de len()
también se presta bien a los estilos funcionales de programación.
lengths = map(len, list_of_containers)
La forma en que tomas una longitud de cualquier cosa para lo que tiene sentido (una lista, diccionario, tupla, cadena, ...) es recurrir
len
a ella.La razón de la sintaxis "extraña" es que internamente Python se traduce
len(object)
enobject.__len__()
. Esto se aplica a cualquier objeto. Entonces, si está definiendo alguna clase y tiene sentido que tenga una longitud, solo defina un__len__()
método y luego se puede invocarlen
esas instancias.fuente
Python utiliza la tipificación de pato : que no se preocupa por lo que un objeto es , el tiempo que tiene la interfaz apropiado para la situación en cuestión. Cuando llama a la función incorporada len () en un objeto, en realidad está llamando a su método interno __len__. Un objeto personalizado puede implementar esta interfaz y len () devolverá la respuesta, incluso si el objeto no es conceptualmente una secuencia.
Para obtener una lista completa de interfaces, eche un vistazo aquí: http://docs.python.org/reference/datamodel.html#basic-customization
fuente
La forma preferida de obtener la longitud de cualquier objeto de Python es pasarlo como argumento a la
len
función. Internamente, python intentará llamar al__len__
método especial del objeto que se pasó.fuente
Solo usa
len(arr)
:fuente
puede usar
len(arr)
como se sugiere en respuestas anteriores para obtener la longitud de la matriz. En caso de que desee las dimensiones de una matriz 2D, puede usararr.shape
retornos alto y anchofuente
len(list_name)
La función toma la lista como parámetro y llama a la__len__()
función de la lista .fuente
Python sugiere que los usuarios lo usen en
len()
lugar de__len__()
por consistencia, tal como lo dijeron otros chicos. Sin embargo, hay otros beneficios:Para algunos tipos incorporados como
list
,str
,bytearray
y así sucesivamente, la puesta en práctica de Cythonlen()
toma un atajo. Devuelve directamente elob_size
en una estructura C, que es más rápido que llamar__len__()
.Si está interesado en tales detalles, puede leer el libro llamado "Fluent Python" de Luciano Ramalho. Hay muchos detalles interesantes en él y pueden ayudarlo a comprender Python más profundamente.
fuente