list одинаковых - Как получить количество элементов в списке в Python?




уникальных индекс (6)

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

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

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


Answers

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

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

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

И сейчас:

len(items)

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

объяснение

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

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

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

Из docs

len(s)

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

len реализуется с __len__ , из docs модели данных:

object.__len__(self)

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

И мы также видим, что __len__ - это метод списков:

items.__len__()

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

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

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

>>> 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 они более читабельны и более эффективны.


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

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

И для полноты (взяв одну для команды с downvotes), это возможно без использования функции len() (я бы не потворствовал этому как хороший вариант):

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

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

(двоеточие в list[:] неявно, поэтому также необязательно)


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


Отвечая на ваш вопрос в качестве примеров, приведенных ранее:

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

print items.__len__()

with open(fname) as f:
    content = f.readlines()
# you may also want to remove whitespace characters like `\n` at the end of each line
content = [x.strip() for x in content] 




python list