Вопрос: Как получить количество элементов в списке в Python?


items = []
items.append("apple")
items.append("orange")
items.append("banana")

# FAKE METHOD::
items.amount()  # Should return 3

Как получить количество элементов в списке?


1493


источник


Ответы:


len()функция может использоваться с большим количеством типов в питон - как встроенные типы, так и типы библиотек.

>>> len([1,2,3])
3

2074



Как получить размер списка?

Чтобы найти размер списка, используйте встроенную функцию, len:

items = []
items.append("apple")
items.append("orange")
items.append("banana")

И сейчас:

len(items)

возвращается 3.

объяснение

Все в Python - это объект, включая списки. Все объекты имеют некоторый заголовок в реализации C.

Списки и другие подобные встроенные объекты с «размером» в Python, в частности, имеют атрибут, называемый ob_size, где кешируется количество элементов в объекте. Поэтому проверка количества объектов в списке происходит очень быстро.

Но если вы проверяете, равен ли размер списка нулю или нет, не используйте len- вместо этого, поместите список в логический контекст - он будет считаться False, если пустой, True в противном случае ,

Из документы

len(s)

Возвращает длину (количество элементов) объекта. Аргумент может быть последовательностью (например, строкой, байтами, кортежем, списком или диапазоном) или   набор (например, словарь, набор или замороженный набор).

lenосуществляется с помощью __len__, из модели данных документы :

object.__len__(self)

Вызывается для реализации встроенной функции len(), Должен возвращать длину объекта, целое число> = 0. Кроме того, объект, который не   определить __nonzero__()[в Python 2 или __bool__()в методе Python 3] и __len__()метод возвращает ноль   считается ложным в булевом контексте.

И мы также можем видеть, что __len__является методом списков:

items.__len__()

возвращается 3.

Встроенные типы вы можете получить len(длина

И на самом деле мы видим, что мы можем получить эту информацию для всех описанных типов:

>>> all(hasattr(cls, '__len__') for cls in (str, bytes, tuple, list, 
                                            xrange, dict, set, frozenset))
True

Не используй lenпроверить пустой или непустой список

Не делай:

if len(items): 
    ...

Вместо этого выполните:

if items:
    ...

я объясните, почему здесь но, if itemsили if not itemsявляется более читабельным и более эффективным.


124



Хотя это может и не быть полезным из-за того, что было бы более разумно использовать функциональность «из коробки», довольно простой взлом заключался бы в создании класса с 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-friendly lengthимущество.

Как всегда, ваш пробег может отличаться.


64



Кроме 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__, Это нормально, когда речь идет о встроенных классах, таких как listно это может привести к проблемам с пользовательскими классами, потому что len(а также length_hint) выполнить некоторые проверки безопасности. Например, обе не допускают отрицательных длин или длины, которые превышают определенное значение ( sys.maxsizeстоимость). Поэтому всегда безопаснее использовать lenвместо __len__метод!


9



Answering your question as the examples also given previously:

items = []
items.append("apple")
items.append("orange")
items.append("banana")

print items.__len__()

6



And for completeness (taking one for the team with the downvotes), it is possible without using the len() function (I would not condone this as a good option):

def count(list):
  item_count = 0
  for item in list[:]:
    item_count = item_count + 1
  return item_count

count([1,2,3,4,5])

(the colon in list[:] is implicit, therefore also optional)


0