Pregunta Obtener la longitud de una matriz en Python


En Pitón, ¿es la siguiente la única forma de obtener la cantidad de elementos?

arr.__len__()

Si es así, ¿por qué la extraña sintaxis?


638
2018-02-05 21:26


origen


Respuestas:


my_list = [1,2,3,4,5]
len(my_list)
# 5

Lo mismo funciona para 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

Era intencionalmente hecho de esta manera para que las listas, tuplas y otros tipos de contenedores no necesitaran implementar explícitamente un público .length() método, en su lugar, puede verificar el len() de cualquier cosa que implemente la 'magia' __len__() método.

Claro, esto puede parecer redundante, pero las implementaciones de control de longitud pueden variar considerablemente, incluso dentro del mismo idioma. No es raro ver un tipo de colección usar un .length() método, mientras que otro tipo utiliza un .length propiedad, mientras que otro uso más .count(). Tener una palabra clave de nivel de idioma unifica el punto de entrada para todos estos tipos. De modo que incluso los objetos que no se consideren listas de elementos aún se pueden verificar 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)

1117
2018-02-05 21:29



La forma de tomar una longitud de cualquier cosa para la que tenga sentido (una lista, diccionario, tupla, cuerda, ...) es llamar len en eso.

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) dentro object.__len__(). Esto se aplica a cualquier objeto. Entonces, si estás definiendo alguna clase y tiene sentido que tenga una longitud, solo define una __len__() método en él y luego uno puede llamar len en esas instancias.


48
2018-02-05 21:34



Python usa pato escribiendo: no le importa qué objeto es, 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 interfaces, échale un vistazo aquí: http://docs.python.org/reference/datamodel.html#basic-customization


23
2018-02-06 09:15



La forma preferida de obtener la longitud de cualquier objeto python es pasarlo como argumento al len función. Internamente, Python intentará llamar al especial __len__ método del objeto que se pasó.


22
2018-02-05 21:32



Solo usa len (arr):

>>> import array
>>> arr = array.array('i')
>>> arr.append('2')
>>> arr.__len__()
1
>>> len(arr)
1

19
2018-02-05 21:30



puedes usar len(arr)  como se sugirió en las respuestas anteriores para obtener la longitud de la matriz. En caso de que quiera las dimensiones de una matriz 2D, puede usar arr.shape devuelve altura y ancho


8
2017-10-20 01:10



len(list_name) la función toma la lista como un parámetro y llama a la lista __len__() función.


7
2018-04-12 11:20