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?
6 réponses
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.
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.
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__
!
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__()
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)