tamaño - ¿Es arr.__ len__() la forma preferida de obtener la longitud de una matriz en Python?
len en python (7)
La forma en que tomas una longitud de cualquier cosa para lo que tenga sentido (una lista, un diccionario, una tupla, una cadena, ...) es para llamarle a len
.
l = [1,2,3,4]
s = ''abcde''
len(l) #returns 4
len(s) #returns 5
La razón de la sintaxis "extraña" es que internamente python traduce len(object)
en object.__len__()
. Esto se aplica a cualquier objeto. Por lo tanto, si está definiendo una clase y tiene sentido que tenga una longitud, simplemente defina un __len__()
y luego puede llamar a len
en esas instancias.
En Python , ¿es la siguiente la única forma de obtener el número de elementos?
arr.__len__()
Si es así, ¿por qué la extraña sintaxis?
La forma preferida de obtener la longitud de cualquier objeto python es pasarlo como un argumento a la función len
. Internamente, python intentará llamar al método __len__
especial del objeto que se pasó.
Python utiliza la escritura de pato : no le importa qué es un objeto, siempre que tenga la interfaz adecuada 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 las interfaces, eche un vistazo aquí: http://docs.python.org/reference/datamodel.html#basic-customization
Solo usa len (arr):
>>> import array
>>> arr = array.array(''i'')
>>> arr.append(''2'')
>>> arr.__len__()
1
>>> len(arr)
1
puede usar len(arr)
como se sugiere en las respuestas anteriores para obtener la longitud de la matriz. En caso de que desee las dimensiones de una matriz 2D, puede usar arr.shape
devuelve alto y ancho
len(list_name)
toma la lista como parámetro y llama a la función __len__()
.
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 cuerdas, 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 no .length()
implementar explícitamente un .length()
público .length()
, en lugar de eso, simplemente puede verificar el len()
de cualquier cosa que implemente el ''magic'' __len__()
método.
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 método .length()
mientras que otro tipo usa una propiedad .length
, mientras que otro usa .count()
. Tener una palabra clave de nivel de idioma unifica el punto de entrada para todos estos tipos. Por lo tanto, incluso los objetos que usted no puede considerar como listas de elementos podrían ser revisados 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)