Получение длины массива в Python

В Python является единственным способом получить количество элементов?

arr.__len__()

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

Ответ 1

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

То же самое работает для кортежей:

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

И строки, которые на самом деле являются просто массивами символов:

my_string = 'hello world'
len(my_string)

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

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

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

lengths = map(len, list_of_containers)

Ответ 2

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

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

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

Ответ 3

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

Ответ 4

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

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

Ответ 5

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

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

Ответ 6

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

Ответ 7

len(list_name) функция принимает список как параметр и вызывает функцию списка __len__().

Ответ 8

Функция len - это та, которая будет использоваться. Передайте arr в качестве аргумента в вашу функцию len, т.е. len(arr). Это вернет длину массива.