Функция len() для определения размера данных
Вывод длины строк и списков в Python
Основной способ:
Для получения длины любого итерируемого объекта (строка, список, кортеж, словарь) используется встроенная функция len(). Результат можно сразу вывести на экран с помощью print().
text = "Привет, мир"
print(len(text)) # 11Python print len (вывод длины в python)
11
Функция len() работает за O(1), так как длина хранится во внутренней структуре объекта. Это самый эффективный способ.
Как узнать длину строки?
Строка - последовательность символов. len() возвращает количество символов, включая пробелы и знаки препинания.
s = "Python"
print(len(s)) # 66
Проблема:
len() все равно покажет 1. Для подсчёта байт используется len(s.encode()).Как вычислить длину списка?
Список - упорядоченная коллекция элементов. len() возвращает количество элементов первого уровня.
lst = [10, 20, 30, 40]
print(len(lst)) # 44
__len__, например, число или None. Перед вызовом len() стоит проверить тип или использовать try-except.Как вывести длину вместе с поясняющим текстом?
Часто требуется отформатировать вывод. Используйте f-строки или конкатенацию.
name = "Анна"
print(f"Длина имени {name}: {len(name)} символа")Длина имени Анна: 4 символа
print("Длина: " + str(len(name))) - легко забыть преобразовать число в строку, что вызовет TypeError.Как обработать случай, когда объект равен None?
Прямой вызов len(None) приводит к TypeError. Лучше выполнить проверку.
data = None
if data is not None:
print(len(data))
else:
print("Объект отсутствует")Объект отсутствует
Как определить длину вложенных структур?
len() считает только элементы верхнего уровня. Для подсчёта всех элементов внутри вложенных списков требуется рекурсия или flatten.
nested = [[1, 2], [3, 4, 5]]
print(len(nested)) # 2 (два вложенных списка)
# Общее количество чисел: sum(len(sublist) for sublist in nested) # 52
Расширенные примеры использования len()
Ниже приведены нестандартные сценарии и подробные пояснения к каждому шагу.
Сравнение длины нескольких строк
strings = ["короткая", "длинная строка", "средняя"]
lengths = {s: len(s) for s in strings}
print(lengths){'короткая': 8, 'длинная строка': 14, 'средняя': 7}Генератор словаря позволяет быстро сопоставить строку и её длину.
Поиск самого длинного слова в списке
words = ["яблоко", "апельсин", "вишня", "гранат"]
longest = max(words, key=len)
print(longest, len(longest))апельсин 8
Параметр key=len в функции max() сравнивает элементы по их длине.
Проверка, является ли строка палиндромом
def is_palindrome(s):
s_clean = s.replace(" ", "").lower()
return s_clean == s_clean[::-1]
test = "А роза упала на лапу Азора"
if is_palindrome(test):
print(f"Строка длиной {len(test)} символов является палиндромом")Строка длиной 23 символов является палиндромом
Здесь len() используется только для вывода, а не для логики проверки.
Использование len() в list comprehension для фильтрации
fruits = ["киви", "манго", "яблоко", "груша"]
long_fruits = [f for f in fruits if len(f) > 5]
print(long_fruits)['яблоко', 'апельсин'] # апельсин есть? В исходном списке его не было. Исправим: добавим.
На самом деле в списке нет 'апельсин', поэтому результат будет ['яблоко']. Данный пример демонстрирует синтаксис.
Длина строки с учётом байт (разные кодировки)
emoji = "?"
print("Символов:", len(emoji))
print("Байт в UTF-8:", len(emoji.encode("utf-8")))Символов: 1 Байт в UTF-8: 4
Для подсчёта фактического объёма памяти, занимаемого строкой, используется encode().
Обработка ошибки при вызове len() на неитерируемом объекте
def safe_len(obj):
try:
return len(obj)
except TypeError:
return None
values = [42, [1,2,3], "abc", None]
for v in values:
print(f"{v!r}: {safe_len(v)}")42: None [1, 2, 3]: 3 'abc': 3 None: None
Функция safe_len предотвращает падение программы и может вернуть None или другое значение по умолчанию.
Подсчёт длины вложенных списков с помощью рекурсии (всех элементов)
def deep_len(obj):
if isinstance(obj, list):
return sum(deep_len(item) for item in obj)
else:
return 1
nested = [1, [2, [3, 4]], 5]
print("Глубинная длина:", deep_len(nested))Глубинная длина: 5
Каждый не-списочный элемент считается за 1, сумма рекурсивно обходится.