Как работает len() со списками: объяснение и примеры
Метод 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()