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


1530
2017-11-11 00:30


origine


Réponses:


le len() fonction peut être utilisée avec beaucoup de types dans Python - les deux types intégrés et les types de bibliothèques.

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

2125
2017-11-11 00:33



Comment obtenir la taille d'une liste?

Pour trouver la taille d'une liste, utilisez la fonction intégrée, 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 quelconque dans l'implémentation C.

Les listes et autres objets intégrés similaires avec une "taille" en Python, en particulier, ont un attribut appelé ob_size, où le nombre d'éléments dans l'objet est mis en cache. 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 - au lieu, mettre la liste dans un contexte booléen - il est traité comme Faux si vide, Vrai sinon.

Du docs

len(s)

Renvoie la longueur (le nombre d'éléments) d'un objet. L'argument peut être une séquence (telle qu'une chaîne, un octet, un tuple, une liste ou une plage) ou   une collection (telle qu'un dictionnaire, un ensemble ou un ensemble figé).

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

object.__len__(self)

Appelé pour implémenter la fonction intégrée len(). Devrait retourner la longueur de l'objet, un entier> = 0. Aussi, un objet qui ne   définir un __nonzero__() [en Python 2 ou __bool__() en Python 3] et dont __len__() méthode 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 intégrés, 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 tester une liste vide ou non vide

Pour tester une longueur spécifique, bien sûr, il suffit de tester l'égalité:

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

Mais il y a un cas particulier pour tester une liste de longueur nulle ou l'inverse. Dans ce cas, ne testez pas pour l'égalité.

Aussi, ne faites pas:

if len(items): 
    ...

Au lieu de cela, faites simplement:

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

ou

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

je expliquer pourquoi ici mais en un mot, if items ou if not items est à la fois plus lisible et plus performant.


136
2017-11-25 21:51



Bien que cela puisse ne pas être utile en raison du fait qu'il serait beaucoup plus logique d'être «prêt à l'emploi», un hack assez simple serait de construire une classe avec un length propriété:

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

Vous pouvez l'utiliser comme ça:

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

Essentiellement, c'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.


64
2018-04-19 21:51



outre len vous pouvez aussi 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'un listeur-itérateur, ce 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 est par définition seulement un "indice", donc la plupart du temps len est mieux.

J'ai vu plusieurs réponses suggérant l'accès __len__. Ceci est bien quand il s'agit de classes intégrées comme list mais cela pourrait conduire à des problèmes avec les classes personnalisées, car len (et length_hint) effectuer des 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 (le sys.maxsize valeur). Il est donc toujours plus sûr d'utiliser le len fonction au lieu de la __len__ méthode!


9
2018-04-07 19:03



Répondre à votre question comme les exemples également donnés précédemment:

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

print items.__len__()

6
2017-07-14 08:36



Et pour être complet (en prendre un pour l'équipe avec les downvotes), il est possible sans utiliser le len() fonction (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 côlon dans list[:] est implicite, donc également facultatif)


-1
2017-12-06 18:14