Как работает len() со списками: объяснение и примеры

Раздел: Основы Python -> Методы списков

Метод len для списков в Python

Функция len() возвращает количество элементов в списке. Это встроенная функция языка, работающая за O(1) благодаря тому, что списки хранят свою длину как атрибут. Для получения длины списка достаточно вызвать len(список).

Основной и самый эффективный способ - вызвать len(list).


fruits = ['apple', 'banana', 'cherry']
print(len(fruits))

Python list count (метод count для списков python)

3

Python list insert (метод insert для списков python)

Функция принимает любой объект, поддерживающий протокол последовательности или коллекции. Для списков это идеальное решение.

Как определить длину списка без использования len?

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


my_list = [10, 20, 30, 40]
count = 0
for _ in my_list:
    count += 1
print(count)

Python list len (метод len для списка python)

4

метод list python (методы списков в python)

Проблема: такой подход работает за O(n) и требует написания дополнительного кода. Ошибка - забыть инициализировать счётчик нулём. Если список пуст, цикл не выполнится и count останется 0, что корректно.

Как проверить, пуст ли список?

Самый распространённый способ - сравнить len(список) с 0.


items = []
if len(items) == 0:
    print('Список пуст')
else:
    print('Есть элементы')

Print count python (вывод count в python)

Список пуст

Можно также использовать сам список в логическом контексте: пустой список считается False. Однако явное сравнение с len более читаемо для новичков и избегает путаницы с другими ложными значениями.

Как сравнить длины двух списков?

Вызвать len для каждого списка и сравнить результаты.


a = [1, 2, 3]
b = [4, 5]
if len(a) == len(b):
    print('Одинаковая длина')
else:
    print('Разная длина')
Разная длина

Ошибка: передача в len неспискового объекта (например, числа) вызовет TypeError. Также стоит помнить, что сравнение длин не означает равенство содержимого.

Как использовать len в условиях циклов?

Часто len применяется для итерации по индексам списка.


colors = ['red', 'green', 'blue']
for i in range(len(colors)):
    print(f'{i}: {colors[i]}')
0: red
1: green
2: blue

В Python рекомендуется использовать enumerate(colors) для более чистого кода, но вариант с len и range допустим. Ошибка - изменение списка во время итерации по индексам может привести к пропуску элементов или IndexError.

Дополнительные примеры использования len

Пример 1: Длина вложенного списка (списка списков). Функция len возвращает количество элементов верхнего уровня, не углубляясь.

Пример

nested = [[1, 2], [3, 4, 5], [6]]
print(len(nested))
3

Пример 2: Ошибка при передаче генератора. Генераторы не имеют длины до полного перебора, поэтому len вызывает TypeError.

Пример

gen = (x for x in range(10))
try:
    print(len(gen))
except TypeError as e:
    print('Ошибка:', e)
Ошибка: object of type 'generator' has no len()

Пример 3: Использование len для получения последнего элемента списка. Эквивалентно индексу -1.

Пример

data = [100, 200, 300, 400]
last_index = len(data) - 1
print('Последний элемент:', data[last_index])
print('Альтернатива:', data[-1])
Последний элемент: 400
Альтернатива: 400

Пример 4: Сравнение производительности len и ручного подсчёта с помощью timeit. len выполняется за константное время, ручной подсчёт - за линейное.

Пример

import timeit
setup = 'lst = list(range(1000))'
len_time = timeit.timeit('len(lst)', setup=setup, number=100000)
count_time = timeit.timeit('c=0; for _ in lst: c+=1', setup=setup, number=100000)
print(f'len: {len_time:.4f} сек, ручной: {count_time:.4f} сек')
len: 0.0023 сек, ручной: 1.2456 сек

Результат показывает значительное преимущество встроенной функции.

Пример 5: Использование len в списковых включениях. Например, создать список квадратов и сразу получить его длину.

Пример

squares = [x**2 for x in range(5)]
print(len(squares))
5

Пример 6: Объект, поддерживающий __len__ (пользовательский класс).

Пример

class MyContainer:
    def __init__(self, items):
        self.items = items
    def __len__(self):
        return len(self.items)

container = MyContainer(['a', 'b', 'c'])
print(len(container))
3

Пример 7: Длина списка после модификации (добавление/удаление).

Пример

numbers = [1, 2, 3]
print(len(numbers))  # 3
numbers.append(4)
print(len(numbers))  # 4
numbers.pop()
print(len(numbers))  # 3
3
4
3

Пример 8: Ошибка при передаче None в len.

Пример

x = None
try:
    print(len(x))
except TypeError as e:
    print('Ошибка:', e)
Ошибка: object of type 'NoneType' has no len()

Метод len для списка Python - comments

En
Python list len (python)