Скидки до 60% и розыгрыш MacBook 0 дней 00 :00 :00 Выбрать курс
Код
#статьи

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

Считаем символы в строке, элементы в списке и даже звёзды на небе.

Иллюстрация: Оля Ежак для Skillbox Media

Функция len() в Python — это встроенная функция, которая подсчитывает количество элементов в разных типах данных. Например, с её помощью можно быстро узнать, сколько букв в слове «программирование» или сколько чисел в списке [1, 2, 3, 4, 5]. «Встроенная» означает, что она доступна сразу после установки Python и её не нужно импортировать или подключать.

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

Содержание


Синтаксис и возможные ошибки

Функция len() принимает один аргумент и в общем виде записывается так:

len(объект)

Вы указываете имя функции, затем ставите круглые скобки и передаёте внутрь объект, длину которого хотите узнать. Функция работает с любыми объектами, которые поддерживают подсчёт количества элементов: строками, списками, кортежами, словарями и другими подходящими типами данных.

Но если вы попробуете вычислить длину целого числа, Python выдаст ошибку:

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

Это происходит потому, что в Python числа относятся к простым, атомарным типам данных — они представляют собой единичные значения, а не последовательности. То есть 404 — это просто одно значение, которое не состоит из подэлементов, поэтому к нему нельзя применить len(). А вот строка "404" состоит из трёх символов, и её вызов len ("404") вернёт 3.

Также len() выдаст ошибку, если вы вообще забудете передать аргументы:

len() # TypeError: len() takes exactly one argument (0 given)

Или передадите больше одного аргумента:

len("привет", "мир") # TypeError: len() takes exactly one argument (2 given)

И ещё вы должны знать, что, начиная с Python 3.8, в официальной документации синтаксис функции len() может выглядеть вот так:

len(объект, /)

Слеш / означает, что аргумент функции должен быть позиционным — его нельзя передавать по имени параметра. Другими словами, так писать можно:

print(len("привет")) # 6

А такая запись приведёт к ошибке:

print(len(obj="привет")) # TypeError: len() takes no keyword arguments

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

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

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

Чтобы лучше запомнить материал, рекомендуем переписать все примеры вручную. Если вы новичок, то для работы вам нужно установить Python на компьютер и создать файл в любом редакторе кода. Или вы можете ничего не устанавливать и воспользоваться бесплатным онлайн-сервисом Google Colab.

Считаем количество элементов в объекте

Это базовый и самый распространённый способ применения функции len() — посчитать, сколько элементов содержится в каком-либо объекте.

Для начала давайте посчитаем числа в списке:

numbers_list = [10, 20, 30, 40, 50]
print(len(numbers_list))  # 5

То же самое работает и с кортежем — неизменяемым набором значений, который записывается в круглых скобках:

point = (45.0, 90.0)
print(len(point))  # 2

А вот пример с диапазоном, который мы получили с помощью функции range():

numbers_range = range(100)
print(len(numbers_range))  # 100 
# В диапазон входят числа от 0 до 99 (включительно)

Рекомендуем самостоятельно попробовать посчитать длину других объектов — принцип везде один и тот же: передаёте len() нужный объект и получаете количество его элементов. Например, вызовите len() для строки или для словаря.

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

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

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

my_list = []

if len(my_list) == 0:
    print("Показываем сообщение: «Ничего не найдено»")
else:
    print("Продолжаем обработку данных")

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

matrix = [
    [1, 2],  # первая строка
    [3, 4],  # вторая строка
    [5, 6]   # третья строка
]

# Считаем количество строк 
print(len(matrix))  # 3

# Считаем количество столбцов 
print(len(matrix[0]))  # 2

# Считаем общее количество элементов во всей матрице
print(sum(len(row) for row in matrix))  # 6

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

# Создаём класс Box 
class Box:
    def __init__(self, items):
        self.items = items  # Сохраняем список предметов

    def __len__(self):
        return len(self.items)  # Возвращаем количество предметов

# Создаём коробку с фруктами
b = Box(["яблоко", "банан", "груша"])

# Вызываем функцию len(), и Python автоматически использует метод __len__()
print(len(b))  # 3

Применяем len() с другими функциями

Существует множество сценариев, в которых len() помогает решать более сложные задачи. Например, можно найти среднее значение в списке чисел:

scores = [80, 90, 70, 10, 30, 50]
average = sum(scores) / len(scores)
print(average) # 55.0

Определить самые короткие и длинные строки:

words = ["кот", "слон", "носорог", "бегемот", "жираф", "медведь", "заяц", "лиса", "волк", "тигр", "лев", "пантера", "леопард", "рысь", "белка", "ёж", "олень", "лось", "кабан", "барсук"]

shortest = min(words, key=len)
longest = max(words, key=len)

print(shortest)  # ёж
print(longest)   # носорог

Или отсортировать слова по их длине:

languages = [
    "Python", "C", "JavaScript", "Go", "Rust", "Java",
    "Kotlin", "TypeScript", "Ruby", "Swift", "Haskell", "Perl"
]

sorted_languages = sorted(languages, key=len)
print(sorted_languages)

Результат вывода:

['C', 'Go', 'Rust', 'Java', 'Ruby', 'Perl', 'Swift', 'Python', 'Kotlin', 'Haskell', 'JavaScript', 'TypeScript']

Мы рассмотрели, как len() может сочетаться с функциями sum(), min(), max() и sorted(). Но этим её применение не ограничивается — вы можете использовать len() для фильтрации данных, генерации списков и прочего.

Задания для закрепления темы

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

Задача на подсчёт уникальных значений

Вам достался список покупок, в который часть товаров попала несколько раз. Попробуйте выяснить, какое количество уникальных товаров в списке:

shopping_list = ["хлеб", "молоко", "сыр", "хлеб", "сыр", "яблоки", "масло", "яйца", "хлеб", "молоко", "сыр", "яблоки", "масло", "печенье", "сыр", "молоко", "яйца", "печенье", "колбаса", "колбаса"]

Решение

С помощью функции set() мы можем преобразовать список во множество и убрать повторяющиеся элементы. Затем нам останется только их сосчитать:

shopping_list = ["хлеб", "молоко", "сыр", "хлеб", "сыр", "яблоки", "масло", "яйца", "хлеб", "молоко", "сыр", "яблоки", "масло", "печенье", "сыр", "молоко", "яйца", "печенье", "колбаса", "колбаса"]

unique_items = set(shopping_list)
print(len(unique_items))

Задача на проверку количества наблюдений

Напишите программу для учёта звёзд на ночном небе. Если наблюдений нет, программа должна вывести сообщение: «Сегодня звёзд не видно». Если в списке есть хотя бы одна звезда, выведите: «Наблюдений: X», где X — количество звёзд. А если звёзд больше 10, напечатайте: «Сегодня звездопад!»

Для проверки программы используйте следующие входные данные:

observed_stars = ["Сириус", "Арктур", "Вега", "Ригель", "Капелла", "Альдебаран", "Бетельгейзе", "Поллукс", "Процион", "Фомальгаут", "Антарес"]

Решение

Чтобы решить эту задачу, мы используем функцию len() вместе с условным оператором if-elif-else для проверки количества звёзд в списке. И далее в зависимости от полученного результата просто выведем нужное сообщение:

observed_stars = ["Сириус", "Арктур", "Вега", "Ригель", "Капелла", "Альдебаран", "Бетельгейзе", "Поллукс", "Процион", "Фомальгаут", "Антарес"]

if len(observed_stars) == 0:
    print("Сегодня звёзд не видно")
elif len(observed_stars) > 10:
    print("Сегодня звездопад!")
else:
    print(f"Наблюдений: {len(observed_stars)}")

Задача на фильтрацию и подсчёт

Представьте, что вы работаете в техподдержке для Python-разработчиков. Каждый день вам приходят десятки сообщений от новичков с просьбами о помощи. Чтобы больше успевать, вам нужно быстро выделять только содержательные обращения — те, в которых не менее 50 символов. Напишите программу, которая будет находить такие сообщения и считать их количество.

Вот пример потока входящих сообщений:

messages = [
    "У меня возникла серьёзная проблема при работе с многопоточностью в Python. Потоки блокируют друг друга, и программа зависает. Помогите разобраться с deadlock",
    "Спасибо за помощь!",
    "При работе с Django не получается настроить аутентификацию пользователей и систему разрешений. Постоянно получаю ошибку доступа",
    "ок",
    "Пытаюсь разобраться с обработкой больших данных в pandas, но DataFrame занимает слишком много памяти. Как оптимизировать работу?",
    "перезвоните мне позже",
    "При развёртывании Flask-приложения на production-сервере возникают проблемы с WSGI и nginx. Требуется помощь в настройке",
    "всем привет)",
    "как дела?",
    "пока!"
]

Решение

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

messages = [
    "У меня возникла серьёзная проблема при работе с многопоточностью в Python. Потоки блокируют друг друга, и программа зависает. Помогите разобраться с deadlock",
    "Спасибо за помощь!",
    "При работе с Django не получается настроить аутентификацию пользователей и систему разрешений. Постоянно получаю ошибку доступа",
    "ок",
    "Пытаюсь разобраться с обработкой больших данных в pandas, но DataFrame занимает слишком много памяти. Как оптимизировать работу?",
    "перезвоните мне позже",
    "При развёртывании Flask-приложения на production-сервере возникают проблемы с WSGI и nginx. Требуется помощь в настройке",
    "всем привет)",
    "как дела?",
    "пока!"
]

detailed_messages = [msg for msg in messages if len(msg) >= 50]
print(len(detailed_messages))  # 4

Больше интересного про код — в нашем телеграм-канале. Подписывайтесь!



Изучайте IT на практике — бесплатно

Курсы за 2990 0 р.

Я не знаю, с чего начать
Научитесь: Профессия Python-разработчик Узнать больше
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована