Как получить количество элементов в списке (длину списка) в Python?
Как получить количество элементов в списке items
?
У меня есть список items
, который выглядит следующим образом:
items = ["apple", "orange", "banana"]
Как я могу узнать, сколько элементов в этом списке? Я ожидаю, что должно быть 3 элемента. Какие есть способы получить это значение в Python?
4 ответ(ов)
Хотя это может не быть полезным, так как было бы логичнее иметь такую функциональность "из коробки", довольно простым решением будет создать класс с свойством length
:
class slist(list):
@property
def length(self):
return len(self)
Вы можете использовать его следующим образом:
>>> l = slist(range(10))
>>> l.length
10
>>> print(l)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
По сути, этот класс является точной копией объекта списка, с добавленным преимуществом наличия удобного в ООП свойства length
.
Как всегда, учитывайте, что ваш опыт может быть различным.
Отвечая на ваш вопрос, вот пример кода, который показывает, как добавить элементы в список и получить его длину:
items = []
items.append("apple")
items.append("orange")
items.append("banana")
print(items.__len__())
В этом примере мы создаем пустой список items
, добавляем в него три фрукта и затем выводим длину списка с помощью метода __len__()
. Вывод будет равен 3
. Однако, в Python более "питоническим" способом узнать длину списка является использование встроенной функции len()
, как показано ниже:
print(len(items))
Это будет эквивалентно предыдущему примеру, но более читаемо и рекомендуется для использования в коде.
Чтобы получить количество элементов в любых последовательных объектах в Python, вашим основным методом будет len()
, например:
a = range(1000) # диапазон
b = 'abcdefghijklmnopqrstuvwxyz' # строка
c = [10, 20, 30] # список
d = (30, 40, 50, 60, 70) # кортеж
e = {11, 21, 31, 41} # множество
Метод len()
может работать со всеми вышеупомянутыми типами данных, потому что они являются итерируемыми, т.е. вы можете по ним итерироваться.
all_var = [a, b, c, d, e] # Все переменные сохранены в список
for var in all_var:
print(len(var))
Пример упрощенного определения метода len()
:
def len(iterable, /):
total = 0
for i in iterable:
total += 1
return total
Этот код показывает, как вы можете подсчитать количество элементов в различных итерируемых объектах в Python, используя встроенный метод len()
.
Существует три способа найти длину элементов в списке. Я сравню эти три метода с анализом производительности.
Метод 1: Использование len()
items = []
items.append("яблоко")
items.append("апельсин")
items.append("банан")
print(len(items))
вывод:
3
Метод 2: Наивный метод подсчета
items = []
items.append("яблоко")
items.append("апельсин")
items.append("банан")
counter = 0
for i in items:
counter += 1
print(counter)
вывод:
3
Метод 3: Использование length_hint()
items = []
items.append("яблоко")
items.append("апельсин")
items.append("банан")
from operator import length_hint
list_len_hint = length_hint(items)
print(list_len_hint)
вывод:
3
Анализ производительности – Наивный метод против len()
и length_hint()
Примечание: Чтобы произвести сравнение, я превращу входной список в большой набор, что даст хорошую разницу во времени для сравнения методов.
items = list(range(100000000))
# Анализ производительности
from operator import length_hint
import time
# Измерение длины списка
# с использованием цикла
# Инициализация счетчика
start_time_naive = time.time()
counter = 0
for i in items:
# инкрементирование счетчика
counter += 1
end_time_naive = str(time.time() - start_time_naive)
# Измерение длины списка
# с использованием len()
start_time_len = time.time()
list_len = len(items)
end_time_len = str(time.time() - start_time_len)
# Измерение длины списка
# с использованием length_hint()
start_time_hint = time.time()
list_len_hint = length_hint(items)
end_time_hint = str(time.time() - start_time_hint)
# Вывод времени выполнения каждого метода
print("Время, затраченное на наивный метод: " + end_time_naive)
print("Время, затраченное на len(): " + end_time_len)
print("Время, затраченное на length_hint(): " + end_time_hint)
Вывод:
Время, затраченное на наивный метод: 7.536813735961914
Время, затраченное на len(): 0.0
Время, затраченное на length_hint(): 0.0
Заключение
Явно видно, что время, затраченное на наивный метод, значительно больше по сравнению с двумя другими методами. Поэтому использование len()
и length_hint()
является наилучшим выбором.
Почему используется string.join(list), а не list.join(string)?
Как клонировать список, чтобы он не изменялся неожиданно после присваивания?
Как вернуть ключи словаря в виде списка в Python?
Как отсортировать список/кортеж списков/кортежей по элементу на заданном индексе
Как преобразовать строковое представление списка в список?