Часто кажется, что узнать длину списка в Python — задача из серии «тривиально». Но на практике, особенно если ты работаешь с массивами данных в реальных проектах (будь то парсинг, DevOps-скрипты или просто автоматизация), нюансов хватает. Не только len()
— есть ещё методы, грабли, и нюансы, которые могут сэкономить кучу времени или, наоборот, всё сломать. Так что разберёмся, как правильно работать с длиной списков и массивов в Python, чтобы не наступать на одни и те же грабли.
Возможности
- Быстро узнать количество элементов в списке, tuple, set, dict и других коллекциях.
- Работать с массивами из сторонних библиотек (например,
numpy
). - Чекать вложенные структуры (двумерные массивы, списки списков и т.д.).
- Писать универсальный код для разных типов данных.
Что требуется
- Python версии 3.6+ (но подойдёт и 2.7, если ты совсем олдскул, но не советую).
- ОС — любая: Linux, macOS, Windows, хоть Raspberry Pi.
- Железо — любое, где работает Python (даже на VPS хватит пары мегабайт RAM).
- Если нужны массивы — NumPy (опционально).
Установка — пошаговая инструкция
- Проверь установлен ли Python:
python --version
или
python3 --version
- Если нужен NumPy (для работы с массивами):
pip install numpy
или, если у тебя несколько версий Python:
python3 -m pip install numpy
- Открой любой редактор или консоль Python:
python # или python3
- Создай список и попробуй узнать его длину:
my_list = [1, 2, 3, 4, 5] print(len(my_list))
Использование: полный список команд и вариантов
Вот самые частые сценарии, которые встречаются у меня и коллег:
- Длина обычного списка:
my_list = ['devops', 'python', 'linux'] print(len(my_list)) # 3
- Длина строки (тоже последовательность!):
my_str = "Hello, world!" print(len(my_str)) # 13
- Длина кортежа (tuple):
my_tuple = (1, 2, 3) print(len(my_tuple)) # 3
- Длина множества (set):
my_set = {1, 2, 3, 3} print(len(my_set)) # 3, дубликаты не считаются
- Длина словаря (dict) — количество ключей:
my_dict = {"a": 1, "b": 2} print(len(my_dict)) # 2
- Длина массива NumPy:
import numpy as np arr = np.array([1, 2, 3, 4]) print(len(arr)) # 4 print(arr.shape) # (4,)
Для многомерных массивов:
matrix = np.array([[1, 2], [3, 4], [5, 6]]) print(len(matrix)) # 3 (количество строк) print(matrix.shape) # (3, 2) print(matrix.size) # 6 (всего элементов)
Официальная дока: https://docs.python.org/3/library/functions.html#len
Ошибки, как делать не надо
- len() не работает с числами:
num = 123 print(len(num)) # TypeError: object of type 'int' has no len()
Числа — не коллекции!
- len() не покажет длину вложенных списков:
matrix = [[1,2], [3,4], [5,6]] print(len(matrix)) # 3, а не 6!
Это количество строк, а не всех элементов.
- Не путай len() и методы типа .count():
my_list = [1,2,2,3] print(my_list.count(2)) # 2 — сколько раз встречается 2, а не длина списка!
- len() не работает с генераторами напрямую:
gen = (x for x in range(10)) print(len(gen)) # TypeError
Генераторы не знают своей длины. Нужно сначала сделать list(gen).
Пример реального использования в окружении
Представим, что у тебя скрипт, который мониторит логи и собирает уникальные IP-адреса за сутки:
unique_ips = set()
with open('/var/log/nginx/access.log') as f:
for line in f:
ip = line.split()[0]
unique_ips.add(ip)
print("Уникальных IP за сутки:", len(unique_ips))
Или, если ты работаешь с массивами NumPy для анализа данных:
import numpy as np
data = np.genfromtxt('metrics.csv', delimiter=',')
print(f"Загружено строк: {len(data)}")
print(f"Размерность массива: {data.shape}")
Заключение
len()
— это вроде бы базовая функция, но если не знать нюансов, можно легко получить не тот результат или словить ошибку. Работая с разными структурами данных, всегда смотри, что именно ты считаешь: элементы, строки, ключи, размерность. А если работаешь с массивами (NumPy, pandas), не забывай про .shape
и .size
. Ну и не пытайся узнать длину у того, что длины не имеет — Python тебе честно об этом скажет.
Официальные ссылки:
docs.python.org: len()
numpy.ndarray.shape
Ваш отзыв