在python中,以下是获取元素数的唯一方法吗?
arr.__len__()
如果是这样,为什么奇怪的语法?
my_list = [1,2,3,4,5] len(my_list) # 5
对元组也是如此:
my_tuple = (1,2,3,4,5) len(my_tuple) # 5
和字符串,它们实际上只是字符数组:
my_string = 'hello world' len(my_string) # 11
它是故意这样做,因此列表、元组和其他容器类型或可迭代对象都不需要显式实现公共.length()方法,相反,您可以检查任何实现“魔术”__len__()方法的len()。
.length()
__len__()
len()
当然,这看起来可能是多余的,但是长度检查实现可以有很大差异,即使在同一种语言中也是如此。看到一种集合类型使用.length()方法而另一种类型使用.length属性,而另一种类型使用.count()并不少见。拥有语言级关键字统一了所有这些类型的切入点。因此,即使你可能不认为是元素列表的对象仍然可以进行长度检查。这包括字符串、队列、树等。
.length
.count()
len()的函数性质也非常适合函数式编程风格。
lengths = map(len, list_of_containers)
只需使用len(arr):
len(arr)
>>> import array >>> arr = array.array('i') >>> arr.append('2') >>> arr.__len__() 1 >>> len(arr) 1
获取任何python对象长度的首选方法是将其作为参数传递给len函数。然后,python将尝试调用传递对象的特殊__len__方法。
len
__len__
你获取任何有意义的东西(列表、字典、元组、字符串……)的长度的方式是对其调用len。
l = [1,2,3,4] s = 'abcde' len(l) #returns 4 len(s) #returns 5
“奇怪”语法的原因是python内部将len(object)转换为object.__len__()。这适用于任何对象。因此,如果您正在定义某个类并且它有一个长度是有意义的,只需在其上定义一个__len__()方法,然后可以在这些实例上调用len。
len(object)
object.__len__()
Python使用鸭子打字:它不在乎什么对象是,只要它具有适合手头情况的接口。当你在对象上调用内置函数len()时,你实际上是在调用其内部__len__方法。自定义对象可以实现此接口,len()将返回答案,即使该对象在概念上不是序列。
有关接口的完整列表,请查看此处:http://docs.python.org/reference/datamodel.html#basic-customization
您可以使用len(arr) 正如前面的答案所建议的那样来获取数组的长度。如果你想要2D数组的尺寸,你可以使用arr.shape返回高度和宽度
arr.shape
len(list_name)函数将list作为参数,并调用list的__len__()函数。
len(list_name)
Python建议用户使用len()而不是__len__()来保持一致性,就像其他人说的那样。然而,还有一些其他好处:
对于list、str、bytearray等一些内置类型,len()的Cython实现走捷径。它直接以C结构返回ob_size,比调用__len__()更快。
list
str
bytearray
ob_size
如果你对这些细节感兴趣,你可以阅读Luciano Ramalho的《Fluent Python》一书。里面有很多有趣的细节,可能会帮助你更深入地了解Python。