Функция len() в Pyhton

Функция len() в Python принимает объект в качестве аргумента и возвращает длину этого объекта. Например, функция len() может возвращать количество элементов в списке.

Синтаксис функции len() имеет следующий вид:

len(object)

Функция len() принимает один аргумент, который может быть:

  • последовательностью — строки, байтовые строки, итерируемые последовательности типа списка или кортежа;
  • коллекцией — словари, множества, замороженные множества и так далее.

А возвращает len() количество элементов в объекте, который передан в качестве аргумента.

Если мы не передаем никакого аргумента или аргумент имеет недопустимый тип, это вызовет исключение TypeError.

Ошибка TypeError возникает, когда тип данных не является коллекцией или последовательностью. Например, логическое значение, int и т. д.

Например:

print(len(False))
print(len(1212))

Результат:

TypeError: object of type 'bool' has no len()
TypeError: object of type 'int' has no len()

Функция len() в действии

Давайте найдем количество элементов внутри списка, иными словами — длину списка.

fruits = ['Bananas', 'Apples', 'Mangoes']

# вычисляем длину списка фруктов
l = len(fruits)
# выводим длину списка на экран
print(l)

# Результат:
# 3

Что собой представляет функция len() в Python?

len() — это встроенная функция Python, которая принимает объект в качестве аргумента и возвращает его длину. Например, она может возвращать количество элементов в списке Python.

help(len)

Результат:

Help on built-in function len in module builtins:
len(obj, /)
Return the number of items in an object.

Всякий раз, когда мы используем встроенные и внешние типы данных с функцией len(), она не производит итерацию по структуре данных. Длина объекта-контейнера хранится как атрибут данного объекта. Значение этого атрибута изменяется каждый раз, когда элементы добавляются или удаляются из структуры данных, и len() просто возвращает данное значение. Это гарантирует, что функция len() работает быстро и эффективно.

Как применяется функция len()

Использование функции len() со встроенными последовательностями

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

# Строка с именем
name = "Andrew"
print(len(name))  # 6

# Список продуктов 
food_items = ["Pizza", "Burger", "French Fries"]
print(len(food_items))  # 3

# Кортеж с координатами
coordinates = (51, 24)
print(len(coordinates))  # 2

# Пустая строка
print(len(""))  # 0

# Пустой список
print(len([]))  # 0

# Пустой кортеж
print(len())  # 0

Объяснение кода:

В приведенном выше фрагменте кода, чтобы найти длину строки name, списка food_items и кортежа coordinates, мы используем len(). Все эти три типа данных являются допустимыми аргументами для функции len(). Данная функция возвращает целое число, так как подсчитывает количество элементов в объекте, который передается ей в качестве аргумента. Если аргумент является пустой последовательностью, функция len() возвращает 0.

Для создания последовательностей в определенном диапазоне мы также можем использовать функцию range(). Данная функция не хранит свои значения, а генерирует их по мере необходимости. Однако мы можем найти длину такой последовательности при помощи функции len().

print(len(range(1, 10)))

# Результат:
# 9

Объяснение кода:

Этот диапазон чисел включает целые числа от 1 до 9 (10 исключается). Мы можем задавать длину объекта функции range(), используя ее аргументы start, stop и step.

Использование функции len() со встроенными коллекциями

Коллекции в Python — это типы данных, построенные на базе контейнеров. Это списки, множества, кортежи и словари. Все коллекции имеют определенные характеристики, основанные на их объявлении и использовании в программе. Например, списки объявляются в квадратных скобках. Они изменяемы, хранят повторяющиеся значения, а к их элементам можно обращаться при помощи индексов.

Пример 1. Определение длины коллекции, сгенерированной при помощи модуля random

В данном примере мы сначала используем функцию randint модуля random для создания списка случайных целых чисел, а затем применим функцию len(), чтобы найти количество элементов в коллекции.

import random

# Создаем список из 10 случайных чисел
nums = [random.randint(1, 10) for _ in range(10)]

print(nums)

# Создаем множество, которое содержит только уникальные элементы списка
unique = set(nums)

# Выводим на экран множество и его длину
print(unique)
print(len(unique))

Результат:

[9, 1, 8, 6, 8, 8, 1, 9, 3, 10]
{1, 3, 6, 8, 9, 10}
6

Объяснение кода:

В приведенной выше программе мы сгенерировали список из 10 случайных чисел в диапазоне от 1 до 10, используя представление списков. Результат будет отличаться при каждом новом запуске кода, поскольку мы генерируем случайные числа. В данном случае множество содержит 6 уникальных чисел.

Пример 2. Определение количества элементов в словаре

Словарь — это встроенный тип данных в Python, который используется для хранения элементов в виде пар ключ-значение. Когда мы используем словарь в качестве аргумента для len(), функция возвращает количество элементов (пар ключ-значение) в словаре.

# Словарь, содержащий продукты питания
print(len({"Potato": 10, "Onion": 12, "Tomato": 11}))

# Пустой словарь
print(len({}))

# Результат:
# 3
# 0

Объяснение кода:

В выводе первым мы получили число 3. Это означает, что в словаре с продуктами есть три пары ключ-значение. Как и в случае с последовательностями, функция len() возвращает 0, если аргументом является либо пустой словарь, либо пустое множество.

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

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

print(len(False))
print(len(1))

Результат:

  TypeError: object of type 'bool' has no len()
  TypeError: object of type 'int' has no len()

Целочисленные, вещественные, логические и сложные типы являются примерами встроенных типов данных, которые нельзя использовать с функцией len(). Функция вызывает TypeError, когда в нее передается аргумент недопустимого типа данных.

Использование функции len() со сторонними библиотеками

Мы также можем использовать функцию len() для объектов из различных сторонних библиотек. В этом разделе мы рассмотрим примеры использования len() с типами данных из двух популярных библиотек — NumPy и pandas.

Пример 1. Использование функции len() с массивом NumPy

Библиотека NumPy используется для выполнения ресурсоемких задач и является строительным блоком для различных типов данных.

Применив функцию NumPy np.array(), мы можем создать объект типа <np.ndarray>, используя переданный в качестве аргумента список.

import numpy as np

nums = np.array([1, 7, 11, 2, 9, 25])

print(type(nums))
print(len(nums))

# Результат:
# <class 'numpy.ndarray'>
# 6

Объяснение кода:

Мы создали одномерный массив длины 6, используя функцию np.array(), и вычислили его тип и длину, используя функции type() и len() соответственно.

Пример 2. Использование функции len() с Pandas DataFrame

Pandas DataFrame — это двумерная структура данных с помеченными осями (строками и столбцами). Данные внутри Pandas DataFrame выровнены табличным образом по строкам и столбцам. Датафреймы (DataFrame) широко используются в машинном обучении, научных вычислениях и многих других областях, связанных с интенсивным использованием данных.

import pandas as pd
# Создаем словарь
marks = {
    "Ash": [60, 75, 90],
    "Gary": [78, 55, 87],
    "Max": [47, 96, 85],
    "Tyson": [68, 88, 69],
}

# Создаем из словаря датафрейм
df = pd.DataFrame(marks, index=["Maths", "Physics", "Chemistry"])

print(df)

# Выводим на экран длину датафрейма
print(len(df))

# Выводим на экран размеры датафрейма
print(df.shape)

Результат:

             Ash  Gary  Max  Tyson
  Maths       60    78   47     68
  Physics     75    55   96     88
  Chemistry   90    87   85     69
  3
  (3, 4)

Объяснение кода:

Ключи нашего словаря, содержащего отметки, представляют собой строки, являющиеся именами студентов. Значение каждого ключа представляет собой список, в котором хранятся оценки по трем предметам: математике, физике и химии.

При создании датафрейма с использованием этого словаря в качестве аргумента в функции pd.DataFrame() мы также должны определить индекс, используя список, содержащий три учебных предмета.

Созданный датафрейм содержит три строки и четыре столбца. Функция len() возвращает количество строк в датафрейме. Pandas DataFrame имеет свойство .shape, которое можно использовать для вывода количества строк и столбцов датафрейма в кортеже из двух элементов.

Использование функции len() в пользовательских классах

Встроенная в Python функция len() вызывает в нашем классе метод с именем __len__(). Такие методы, имеющие двойное подчеркивание в начале и конце имени, называются магическими.

Реализация этого метода позволит вызову len() работать с нашим классом. Если данный метод не будет реализован, вызов функции len() завершится ошибкой AttributeError. Встроенная в Python функция len() вызывает метод .__len__() своего аргумента.

class Order:
    def __init__(self, count):
        self.count = count

    def __len__(self):
        return self.count


myOrder = Order(7)
print(len(myOrder))

# Результат:
# 7

Объяснение кода:

В вышеприведенной программе есть класс Order с атрибутом count. Мы также реализовали магическую функцию __len__(), которая возвращает общее количество заказов, переданных ей в качестве аргумента. Далее мы создали экземпляр нашего класса с именем myOrder, передав в него аргумент count, равный семи. И при вызове функции len() было возвращено значение данного атрибута.

Заключение

В данной статье мы рассмотрели, как использовать функцию len() в Python для определения количества элементов в последовательностях, коллекциях и сторонних типах данных.

Функция len() принимает объект в качестве аргумента и возвращает длину этого объекта.

Функцию len() можно использовать для:

  • встроенных типов данных;
  • типов данных из сторонних библиотек (например Numpy или pandas);
  • заданных пользователем классов (для этого в классе необходимо реализовать магический метод __len__());

Перевод статьи «len() Function in Python».