Это Арр. LEN () предпочтительный способ получить длину массива в Python?

на Python, Это следующее единственный способ получить количество элементов?

arr.__len__()

если да, то почему странный синтаксис?

7 ответов


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

он был намеренно сделано так так что списки, кортежи и другие типы контейнеров не должны были явно реализовывать public .length() метод, вместо этого вы можете просто проверить len() всего, что реализует "магию"__len__() метод.

конечно, это может показаться избыточным, но проверка длины реализации могут значительно отличаться, даже в пределах одного языка. Нередко можно увидеть, что один тип коллекции использует .length() метод, в то время как другой тип использует .length свойство, в то время как еще один использует .count(). Наличие ключевого слова на уровне языка унифицирует точку входа для всех этих типов. Таким образом, даже объекты, которые вы не можете считать списками элементов, все еще могут быть проверены по длине. Это включает строки, очереди, деревья и т. д.

функциональная природа len() также поддается хорошо к функциональным стилям программирования.

lengths = map(len, list_of_containers)

как вы берете длину чего-либо, для чего это имеет смысл (список, Словарь, кортеж, строка,...) стоит позвонить len на нем.

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

причина" странного " синтаксиса заключается в том, что внутренне python переводит len(object) на object.__len__(). Это относится к любому объекту. Итак, если вы определяете какой-то класс, и для него имеет смысл иметь длину, просто определите __len__() метод на нем, а затем можно вызвать len на эти экземпляры.


Python использует утиной типизацией: его не волнует, что объект is, пока он имеет соответствующий интерфейс для ситуации под рукой. Когда вы вызываете встроенную функцию LEN () для объекта, вы фактически вызываете его внутренний метод __len__. Пользовательский объект может реализовать этот интерфейс, и len () вернет ответ, даже если объект не является концептуально последовательностью.

для полного списка интерфейсов, посмотрите здесь: http://docs.python.org/reference/datamodel.html#basic-customization


предпочтительный способ получить длину любого объекта python-передать его в качестве аргумента . Внутри python попытается вызвать специальный __len__ метод переданного объекта.


просто используйте len (arr):

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

можно использовать len(arr) как указано в предыдущих ответах, чтобы получить длину массива. Если вам нужны размеры 2D-массива, вы можете использовать arr.shape возвращает высоту и ширину


len(list_name) функция принимает list в качестве параметра и вызывает list's