Как я могу получить количество элементов в списке?
Учтите следующее:
items = []
items.append("apple")
items.append("orange")
items.append("banana")
# FAKE METHOD:
items.amount() # Should return 3
Как получить количество элементов в списке items
?
Ответы
Ответ 1
Функция len()
может использоваться с несколькими различными типами в Python - как встроенными типами, так и типами библиотек. Например:
>>> len([1,2,3])
3
Официальная документация 2.x здесь: len()
Официальная документация 3.x здесь: len()
Ответ 2
Как получить размер списка?
Чтобы найти размер списка, используйте встроенную функцию, len
:
items = []
items.append("apple")
items.append("orange")
items.append("banana")
И сейчас:
len(items)
возвращается 3.
объяснение
Все в Python - это объект, включая списки. Все объекты имеют некоторый заголовок в реализации C.
Списки и другие подобные встроенные объекты с "размером" в Python, в частности, имеют атрибут ob_size
, где ob_size
количество элементов в объекте. Поэтому проверка количества объектов в списке происходит очень быстро.
Но если вы проверяете, равен ли размер списка нулю или нет, не используйте len
- вместо этого поместите список в логический контекст - он будет считаться False, если пуст, True в противном случае.
len(s)
Возвращает длину (количество элементов) объекта. Аргументом может быть последовательность (например, строка, байты, кортеж, список или диапазон) или коллекция (например, словарь, набор или замороженный набор).
len
реализуется с __len__
, из документов модели данных:
object.__len__(self)
Вызывается для реализации встроенной функции len()
. Должен возвращать длину объекта, целое число> = 0. Кроме того, объект, который не определяет __nonzero__()
[в Python 2 или __bool__()
в Python 3] и метод __len__()
возвращает ноль, считается false в булевом контексте.
И мы также видим, что __len__
- это метод списков:
items.__len__()
возвращается 3.
Builtin типов вы можете получить len
(длина)
И на самом деле мы видим, что мы можем получить эту информацию для всех описанных типов:
>>> all(hasattr(cls, '__len__') for cls in (str, bytes, tuple, list,
xrange, dict, set, frozenset))
True
Не используйте len
для проверки пустого или непустого списка
Конечно, для проверки определенной длины, просто проверьте равенство:
if len(items) == required_length:
...
Но есть специальный случай для тестирования списка нулевой длины или обратного. В этом случае не проверяйте на равенство.
Кроме того, не делайте:
if len(items):
...
Вместо этого просто выполните:
if items: # Then we have some items, not empty!
...
или
if not items: # Then we have an empty list!
...
Я объясняю, почему здесь, но вкратце, if items
или if not items
они более читабельны и более эффективны.
Ответ 3
Хотя это может быть не очень полезно из-за того, что было бы более разумно использовать функциональность "из коробки", довольно простой взлом заключался бы в создании класса со свойством 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]
По существу, он точно идентичен объекту списка, с дополнительным преимуществом наличия OOP-дружественного свойства length
.
Как всегда, ваш пробег может меняться.
Ответ 4
Помимо len
вы также можете использовать operator.length_hint
(требуется Python 3. 4+). Для обычного list
оба эквивалентны, но length_hint
позволяет получить длину итератора списка, что может быть полезно в определенных обстоятельствах:
>>> from operator import length_hint
>>> l = ["apple", "orange", "banana"]
>>> len(l)
3
>>> length_hint(l)
3
>>> list_iterator = iter(l)
>>> len(list_iterator)
TypeError: object of type 'list_iterator' has no len()
>>> length_hint(list_iterator)
3
Но length_hint
по определению является лишь "подсказкой", поэтому в большинстве случаев len
лучше.
Я видел несколько ответов, предлагающих доступ к __len__
. Это length_hint
при работе со встроенными классами, такими как list
, но это может привести к проблемам с пользовательскими классами, потому что len
(и length_hint
) реализуют некоторые проверки безопасности. Например, оба не допускают отрицательных длин или длин, которые превышают определенное значение (значение sys.maxsize
). Поэтому всегда безопаснее использовать функцию len
вместо метода __len__
!
Ответ 5
Отвечая на ваш вопрос в качестве примеров, приведенных ранее:
items = []
items.append("apple")
items.append("orange")
items.append("banana")
print items.__len__()
Ответ 6
И для полноты, это возможно без использования функции len()
(я не одобрил бы это как хороший вариант, НЕ ПРОГРАММИРУЙТЕ, КАК ЭТО В ПИТОНЕ):
def count(list):
item_count = 0
for item in list[:]:
item_count += 1
return item_count
count([1,2,3,4,5])
(Двоеточие в list[:]
неявно и поэтому также необязательно.)
Здесь урок для начинающих программистов: вы не можете получить количество элементов в списке, не посчитав их в какой-то момент. В вычислительном отношении лучше отслеживать количество элементов по мере их добавления. Смотрите ответ Нафтули Кея.
Ответ 7
Вы можете предпочесть использование команды len(l)
в python, где l - список.
Ответ 8
Если вам нужно знать ИСПОЛЬЗОВАНИЕ ПАМЯТИ заданного типа, вы можете использовать функцию sys.getsizeof
>>> from sys import getsizeof
>>> l = []
>>> getsizeof(l)
64
>>> l.append(10)
>>> getsizeof(l)
96
>>> getsizeof(10)
28
>>> l.append(True)
>>> getsizeof(l)
96
>>> getsizeof(True)
28
>>> getsizeof("toto")
53
>>> getsizeof(10.5)
24
Эта функция отлично работает для собственных типов python
https://docs.python.org/dev/library/sys.html#sys.getsizeof
Но если вам нужно проанализировать сложные структуры, посмотрите этот рецепт.
Ответ 9
Функция Python len()
достаточно для определения размера списка. Существует также функция __len__()
, которую вы можете использовать.
items = []
items.append("apple")
items.append("orange")
items.append("banana")
print len(items) #it will print 3
print items.__len__() #it will print 3
Ответ 10
Вы можете просто использовать len
функцию python. Использование:
len(list)
Это будет длина или количество элементов в списке.
Длина списков
Метод len()
возвращает количество элементов в списке.
-Tutorials Point
Ответ 11
Метод len() возвращает количество элементов в списке.
Синтаксис
len(list)
list - это список, для которого нужно подсчитать количество элементов.
Пример В следующем примере показано использование метода len().
fruits, prices = ["Apple","Orange","Banana"], [50, 60,30]
print("First list length : ", len(fruits))
print("Second list length : ", len(prices))
Выход:
First list length : 3
Second list length : 3
Ответ 12
Ну вот. Попробуйте функцию len()
.
Нравится len(your_list_name)
.
https://docs.python.org/3.3/library/functions.html#len
Ответ 13
Количество элементов в списке.
myList = [8, 2, 3, 6, 8]
Len (MyList)
Выход 5
Подсчитайте вхождения данного элемента в списке.
MyList = [ "а", "а", "а", "б", "в", "с"]
мой список. рассчитывать ( 'A')
Выход 3
Проверьте, есть ли данное значение в списке.
MyList = [10,20,30,40,50]
25 в моем списке
Вывод False.
Ответ 14
С точки зрения того, как len()
фактически работает, это его реализация C:
static PyObject *
builtin_len(PyObject *module, PyObject *obj)
/*[clinic end generated code: output=fa7a270d314dfb6c input=bc55598da9e9c9b5]*/
{
Py_ssize_t res;
res = PyObject_Size(obj);
if (res < 0) {
assert(PyErr_Occurred());
return NULL;
}
return PyLong_FromSsize_t(res);
}
Py_ssize_t
- максимальная длина, которую может иметь объект. PyObject_Size()
- это функция, которая возвращает размер объекта. Если он не может определить размер объекта, он возвращает -1. В этом случае этот блок кода будет выполнен:
if (res < 0) {
assert(PyErr_Occurred());
return NULL;
}
И в результате возникает исключение. В противном случае этот блок кода будет выполнен:
return PyLong_FromSsize_t(res);
res
которое является целым числом C
, конвертируется в python long
и возвращается. Все целые числа Python хранятся как longs
начиная с Python 3.
Ответ 15
new_list_length = list(x for x in range(10)).__len__()