Is arr.__len__() the preferred way to get the length of an array in Python?
my_list = [1,2,3,4,5] len(my_list) # 5
The same works for tuples:
my_tuple = (1,2,3,4,5) len(my_tuple) # 5
And strings, which are really just arrays of characters:
my_string = 'hello world' len(my_string) # 11
It was intentionally done this way so that lists, tuples and other container types or iterables didn't all need to explicitly implement a public
.length() method, instead you can just check the
len() of anything that implements the 'magic'
Sure, this may seem redundant, but length checking implementations can vary considerably, even within the same language. It's not uncommon to see one collection type use a
.length() method while another type uses a
.length property, while yet another uses
.count(). Having a language-level keyword unifies the entry point for all these types. So even objects you may not consider to be lists of elements could still be length-checked. This includes strings, queues, trees, etc.
The functional nature of
len() also lends itself well to functional styles of programming.
lengths = map(len, list_of_containers)
Read more... Read less...
The way you take a length of anything for which that makes sense (a list, dictionary, tuple, string, ...) is to call
len on it.
l = [1,2,3,4] s = 'abcde' len(l) #returns 4 len(s) #returns 5
The reason for the "strange" syntax is that internally python translates
object.__len__(). This applies to any object. So, if you are defining some class and it makes sense for it to have a length, just define a
__len__() method on it and then one can call
len on those instances.
The preferred way to get the length of any python object is to pass it as an argument to the
len function. Internally, python will then try to call the special
__len__ method of the object that was passed.
Python uses duck typing: it doesn't care about what an object is, as long as it has the appropriate interface for the situation at hand. When you call the built-in function len() on an object, you are actually calling its internal __len__ method. A custom object can implement this interface and len() will return the answer, even if the object is not conceptually a sequence.
For a complete list of interfaces, have a look here: http://docs.python.org/reference/datamodel.html#basic-customization
>>> import array >>> arr = array.array('i') >>> arr.append('2') >>> arr.__len__() 1 >>> len(arr) 1
you can use
as suggested in previous answers to get the length of the array. In case you want the dimensions of a 2D array you could use
arr.shape returns height and width