В Python является единственным способом получить количество элементов?
arr.__len__()
Если да, то почему странный синтаксис?
В Python является единственным способом получить количество элементов?
arr.__len__()
Если да, то почему странный синтаксис?
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)
Как вы берете длину всего, что имеет смысл (список, словарь, кортеж, строка,...), нужно называть len
на нем.
l = [1,2,3,4]
s = 'abcde'
len(l) #returns 4
len(s) #returns 5
Причиной синтаксиса "странный" является то, что внутренний python переводит len(object)
в object.__len__()
. Это относится к любому объекту. Итак, если вы определяете некоторый класс, и имеет смысл, чтобы он имел длину, просто определите на нем метод __len__()
, а затем можно вызвать len
в этих экземплярах.
Предпочтительным способом получения длины любого объекта python является передача его в качестве аргумента функции len
. Внутри python попытается вызвать специальный метод __len__
объекта, который был передан.
Python использует утиную печать: ему не важно, что такое объект, если у него есть соответствующий интерфейс для ситуации в рука. Когда вы вызываете встроенную функцию len() для объекта, вы на самом деле вызываете свой внутренний метод __len__. Пользовательский объект может реализовать этот интерфейс, и len() вернет ответ, даже если объект не является концептуально последовательностью.
Полный список интерфейсов смотрите здесь: http://docs.python.org/reference/datamodel.html#basic-customization
Просто используйте 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)
функция принимает список как параметр и вызывает функцию списка __len__()
.
Функция len
- это та, которая будет использоваться. Передайте arr
в качестве аргумента в вашу функцию len
, т.е. len(arr)
. Это вернет длину массива.