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

Учтите следующее:

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, но это может привести к проблемам с пользовательскими классами, потому что lenlength_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

Ответ 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__()