Comment obtenir le nombre d'éléments dans une liste en Python?

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

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

Comment puis-je obtenir le nombre d'éléments dans la liste?

1604
demandé sur Max Bethke 2009-11-11 03:30:54

6 réponses

la fonction len() peut être utilisée avec beaucoup de types dans Python - à la fois des types intégrés et des types de bibliothèque.

>>> len([1,2,3])
3
2212
répondu gnud 2015-10-15 17:03:10

Comment obtenir la taille d'une liste?

Pour trouver la taille d'une liste, utilisez la fonction builtin, len :

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

et maintenant:

len(items)

renvoie 3.

explication

tout en Python est un objet, y compris les listes. Tous les objets ont un en-tête dans l'implémentation C.

Les listes

et autres objets similaires avec une" taille "en Python, en particulier, ont un attribut appelé ob_size , où le nombre d'éléments dans l'objet est caché. Donc vérifier le nombre d'objets dans une liste est très rapide.

mais si vous vérifiez si la taille de la liste est zéro ou non, n'utilisez pas len - à la place, mettre la liste dans un contexte booléen - il a traité comme faux si vide, vrai autrement .

De la docs

len(s)

retourner la longueur (le nombre d'articles) d'un objet. L'argument peut être une séquence (telle qu'une chaîne, des octets, un tuple, une liste ou une plage) ou une collection (comme un dictionnaire, un jeu, ou un ensemble figé).

len est mis en œuvre avec __len__ , à partir du modèle de données docs :

object.__len__(self)

appelé à implémenter la fonction intégrée len() . Devrait retourner la longueur de l'objet, un entier >= 0. Aussi, un objet qui n'est pas définir une méthode __nonzero__() [en Python 2 ou __bool__() en Python 3] et dont la méthode __len__() renvoie zéro est considéré comme faux dans un contexte Booléen.

Et nous pouvons aussi voir que __len__ est une méthode de listes:

items.__len__()

renvoie 3.

types de bâtiments vous pouvez obtenir le len (longueur) de

Et, en fait, nous voyons que nous pouvons obtenir cette information pour tous les types décrits:

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

ne pas utiliser len pour vérifier si la liste est vide ou non

pour tester une longueur spécifique, bien sûr, simplement critère d'égalité:

if len(items) == required_length:
    ...

mais il y a un cas spécial pour tester une liste de longueur zéro ou l'inverse. Dans ce cas, ne pas tester l'égalité.

aussi, ne faites pas:

if len(items): 
    ...

au lieu de cela, il suffit de faire:

if items:     # Then we have some items, not empty!
    ...

ou

if not items: # Then we have an empty list!
    ...

I expliquer pourquoi ici mais en bref, if items ou if not items est à la fois plus lisible et plus performantes.

156
répondu Aaron Hall 2018-07-07 14:33:50

bien que cela ne soit peut-être pas utile en raison du fait que cela aurait beaucoup plus de sens d'être la fonctionnalité "out of the box", un piratage assez simple serait de construire une classe avec une propriété length :

class slist(list):
    @property
    def length(self):
        return len(self)

vous pouvez l'utiliser comme ceci:

>>> l = slist(range(10))
>>> l.length
10
>>> print l
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

essentiellement, il est exactement identique à un objet de liste, avec l'avantage supplémentaire d'avoir un OOP-friendly length propriété.

Comme toujours, votre kilométrage peut varier.

65
répondu Naftuli Kay 2013-04-19 21:51:10

en Outre len vous pouvez également utiliser operator.length_hint (nécessite python 3.4+). Pour normal list les deux sont équivalents, mais length_hint permet d'obtenir la longueur d'une liste itérateur, qui pourrait être utile dans certaines circonstances:

>>> 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

mais length_hint n'est par définition qu'un" indice", donc la plupart du temps len est mieux.

j'ai vu plusieurs réponses suggérant l'accès à __len__ . Cela est acceptable dans le cas de classes intégrées comme list , mais cela pourrait entraîner des problèmes avec les classes personnalisées parce que len (et length_hint ) mettent en œuvre certaines vérifications de sécurité. Par exemple, les deux ne permettent pas les longueurs négatives ou les longueurs qui dépassent une certaine valeur (la valeur sys.maxsize ). Il est donc toujours plus sûr d'utiliser la fonction len au lieu de la méthode __len__ !

9
répondu MSeifert 2017-04-07 19:03:33

répondant à votre question comme les exemples donnés précédemment:

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

print items.__len__()
6
répondu Shai Alon 2017-05-27 22:03:46

et pour l'exhaustivité (prendre un pour l'équipe avec les downvotes), il est possible sans utiliser la fonction len() (Je ne tolérerais pas cela comme une bonne 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])

(le point dans list[:] est implicite, donc aussi facultatif)

2
répondu Jonathan Komar 2018-05-08 06:33:41