Joa*_*nge 709 python arrays methods
在Python中,以下是获取元素数量的唯一方法吗?
arr.__len__()
Run Code Online (Sandbox Code Playgroud)
如果是这样,为什么奇怪的语法?
Sov*_*iut 1211
my_list = [1,2,3,4,5]
len(my_list)
# 5
Run Code Online (Sandbox Code Playgroud)
对于元组也是如此:
my_tuple = (1,2,3,4,5)
len(my_tuple)
# 5
Run Code Online (Sandbox Code Playgroud)
和字符串,它们实际上只是字符数组:
my_string = 'hello world'
len(my_string)
# 11
Run Code Online (Sandbox Code Playgroud)
它是故意以这种方式完成的,因此列表,元组和其他容器类型并不都需要显式实现公共.length()
方法,而是只需检查len()
实现"魔术" __len__()
方法的任何内容.
当然,这似乎是多余的,但长度检查实现可能会有很大差异,即使在同一种语言中也是如此.一种集合类型使用.length()
方法而另一种类型使用.length
属性而另一种类型使用属性并不罕见.count()
.使用语言级关键字统一所有这些类型的入口点.因此,即使是您可能不认为是元素列表的对象仍然可以进行长度检查.这包括字符串,队列,树木等.
功能性len()
也很适合函数式编程.
lengths = map(len, list_of_containers)
Run Code Online (Sandbox Code Playgroud)
rz.*_*rz. 52
你采取任何有意义的事情(列表,字典,元组,字符串......)的方式就是调用len
它.
l = [1,2,3,4]
s = 'abcde'
len(l) #returns 4
len(s) #returns 5
Run Code Online (Sandbox Code Playgroud)
"奇怪"语法的原因是内部python转换len(object)
为object.__len__()
.这适用于任何对象.所以,如果你要定义一个类,并且它有一个长度是有意义的,只需__len__()
在它上面定义一个方法,然后就可以调用len
这些实例.
Unc*_*eiv 23
Python使用duck typing:它不关心对象是什么,只要它具有适合当前情况的适当接口.当您在对象上调用内置函数len()时,实际上是在调用其内部__len__方法.自定义对象可以实现此接口,len()将返回答案,即使该对象在概念上不是序列.
有关接口的完整列表,请查看此处:http://docs.python.org/reference/datamodel.html#basic-customization
Tim*_*her 21
只需使用len(arr):
>>> import array
>>> arr = array.array('i')
>>> arr.append('2')
>>> arr.__len__()
1
>>> len(arr)
1
Run Code Online (Sandbox Code Playgroud)