Considérer ce qui suit:
items = []
items.append("Apple")
items.append("orange")
items.append("banana")
# FAKE METHOD:
items.amount() # Should return 3
Comment obtenir le nombre d'éléments dans la liste items
?
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.
Tout dans Python est un objet, y compris des 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 de 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 égale ou non à zéro, n'utilisez pas len
- à la place, placez la liste dans un contexte booléen - elle est traitée comme étant False si vide, True sinon .
len(s)
Renvoie la longueur (le nombre d'éléments) d'un objet. L'argument peut être une séquence (chaîne, octets, tuple, liste ou plage, par exemple) ou une collection (dictionnaire, jeu ou jeu figé).
len
est implémenté avec __len__
, à partir du modèle de données docs :
object.__len__(self)
Appelé pour implémenter la fonction intégrée
len()
. Doit renvoyer la longueur de l'objet, un entier> = 0. En outre, un objet qui ne définit pas une méthode__nonzero__()
[in Python 2 ou__bool__()
dans 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.
len
(longueur) deEt 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
len
pour tester une liste vide ou non videPour tester une longueur spécifique, bien sûr, testez simplement l'égalité:
if len(items) == required_length:
...
Mais il existe un cas particulier pour tester une liste de longueur zéro ou l'inverse. Dans ce cas, ne testez pas 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 explique pourquoi ici mais en bref, if items
ou if not items
est à la fois plus lisible et plus performant.
Bien que cela puisse ne pas être utile en raison du fait qu'il serait beaucoup plus logique de fonctionner comme une fonctionnalité "prête à l'emploi", un hack assez simple consisterait à 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 la liste, avec l'avantage supplémentaire de posséder une propriété OOP length
conviviale.
Comme toujours, votre kilométrage peut varier.
Outre len
, vous pouvez également utiliser operator.length_hint
(requiert Python 3.4+). Pour un list
normal, les deux sont équivalents, mais _length_hint
_ permet d’obtenir la longueur d’un lister-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 meilleur.
J'ai vu plusieurs réponses suggérant d'accéder à ___len__
_. Cela convient lorsque vous utilisez des classes intégrées telles que list
, mais vous risquez de rencontrer des problèmes avec les classes personnalisées, car len
(et _length_hint
_) implémentent certaines vérifications de sécurité. Par exemple, les deux n'autorisent pas les longueurs négatives ou les longueurs dépassant 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__
_!
Et pour être complet, il est possible de ne pas utiliser la fonction len()
(je ne tolérerais pas cela comme une bonne option. NE PROGRAMMEZ PAS COMME CECI À PYTHON):
def count(list):
item_count = 0
for item in list[:]:
item_count += 1
return item_count
count([1,2,3,4,5])
(Les deux points dans list[:]
sont implicites et sont donc également facultatifs.)
La leçon à tirer ici pour les nouveaux programmeurs est la suivante: vous ne pouvez pas obtenir le nombre d’éléments dans une liste sans les compter à un moment donné. En calcul, il est préférable de garder une trace du nombre d'éléments au fur et à mesure que vous les ajoutez. Voir la réponse de Naftuli Kay.
Répondant à votre question comme les exemples également donnés précédemment:
items = []
items.append("Apple")
items.append("orange")
items.append("banana")
print items.__len__()