在Python中获取数组的长度

在Python中 ,下面是获取元素数量的唯一方法吗?

arr.__len__() 

如果是这样,为什么奇怪的语法?

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

元组的相同工作:

 my_tuple = (1,2,3,4,5) len(my_tuple) 

而string,其实只是字符数组:

 my_string = 'hello world' len(my_string) 

这是故意这样做,以便列表,元组和其他容器types不需要明确实现一个公共的.length()方法,而是你可以检查任何实现“魔术”的len() __len__()方法。

当然,这看起来可能是多余的,但是长度检查实现可能会有相当大的差异,即使在相同的语言中。 看到一个集合types使用.length()方法,而另一个types使用.length属性并不罕见,而另一个types使用.count() 。 拥有语言级别的关键字可以统一所有这些types的入口点。 所以即使是你可能不认为是元素列表的对象,仍然可以进行长度检查。 这包括string,队列,树木等

len()的function本质也适用于编程的function风格。

 lengths = map(len, list_of_containers) 

你采取一些有意义的东西(列表,字典,元组,string…)的方法是调用len

 l = [1,2,3,4] s = 'abcde' len(l) #returns 4 len(s) #returns 5 

“奇怪”语法的原因是内部python将len(object)转换为object.__len__() 。 这适用于任何对象。 所以,如果你正在定义一些类,并且它有一个长度是有意义的,只要定义一个__len__()方法,然后可以在这些实例上调用len

获取任何python对象长度的首选方法是将其作为parameter passing给len函数。 在内部,python将尝试调用传递的对象的特殊__len__方法。

Python使用鸭子打字 :它不关心对象什么,只要它具有适当的接口。 在对象上调用内置函数len()时,实际上正在调用其内部的__len__方法。 自定义对象可以实现这个接口,len()将返回答案,即使这个对象在概念上不是一个序列。

有关接口的完整列表,请看这里: http : //docs.python.org/reference/datamodel.html#basic-customization

只要使用len(arr):

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

您可以使用len(arr)如前面的答案中所build议的那样获取数组的长度。 如果你想要二维数组的尺寸,你可以使用arr.shape返回高度和宽度

len(list_name)函数将list作为参数,并调用list的__len__()函数。

len函数是要使用的函数。 将arr作为parameter passing给你的len函数,即len(arr) 。 这将返回数组的长度。