В Python , следующий ли единственный способ получить количество элементов?
arr.__len__()
Если так, то почему странный синтаксис?
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
Это было сделано намеренно таким образом, чтобы списки, кортежи и другие типы контейнеров или итераций не требовали явной реализации открытого .length()
метода, вместо этого вы можете просто проверить len()
все, что реализует «магический» __len__()
метод.
Конечно, это может показаться излишним, но реализации проверки длины могут значительно различаться даже в пределах одного языка. Часто один тип коллекции использует .length()
метод, в то время как другой тип использует .length
свойство, в то время как другой использует .count()
. Наличие ключевого слова на уровне языка объединяет точку входа для всех этих типов. Таким образом, даже объекты, которые вы не считаете списками элементов, все же могут быть проверены по длине. Это включает в себя строки, очереди, деревья и т. Д.
Функциональная природа len()
также хорошо подходит для функциональных стилей программирования.
lengths = map(len, list_of_containers)
То, как вы берете длину чего-либо, для чего это имеет смысл (список, словарь, кортеж, строка, ...) - это вызывать
len
это.Причина "странного" синтаксиса в том, что внутренне Python переводит
len(object)
вobject.__len__()
. Это относится к любому объекту. Итак, если вы определяете некоторый класс, и для него имеет смысл иметь длину, просто определите для него__len__()
метод, и тогда можно будет вызыватьlen
эти экземпляры.источник
Python использует утиной типизации : он не заботится о том, что объект является , до тех пор , как он имеет соответствующий интерфейс для конкретной ситуации. Когда вы вызываете встроенную функцию len () для объекта, вы фактически вызываете его внутренний метод __len__. Пользовательский объект может реализовать этот интерфейс, и len () вернет ответ, даже если объект концептуально не является последовательностью.
Полный список интерфейсов можно найти здесь: http://docs.python.org/reference/datamodel.html#basic-customization.
источник
Предпочтительный способ получить длину любого объекта python - передать его в качестве аргумента
len
функции. Внутри себя python попытается вызвать специальный__len__
метод переданного объекта.источник
Просто используйте
len(arr)
:источник
Вы можете использовать,
len(arr)
как предложено в предыдущих ответах, чтобы получить длину массива. Если вам нужны размеры 2D-массива, вы можете использоватьarr.shape
возвращаемые значения высоты и ширины.источник
len(list_name)
Функция принимает список в качестве параметра и вызывает__len__()
функцию списка .источник
Python предлагает пользователям использовать
len()
вместо__len__()
согласованности, как говорили другие парни. Однако есть и другие преимущества:Для некоторых встроенных типов , таких как
list
,str
,bytearray
и так далее, реализация Cython изlen()
занимает ярлык. Он напрямую возвращаетob_size
структуру C, которая быстрее, чем вызов__len__()
.Если вас интересуют такие детали, вы можете прочитать книгу Лучано Рамалхо под названием «Свободный питон». В нем много интересных деталей, которые могут помочь вам глубже понять Python.
источник