En utilisant Python 2.6, existe-t-il un moyen de vérifier si tous les éléments d'une séquence sont égaux à une valeur donnée, dans une seule instruction?
[pseudocode]
my_sequence = (2,5,7,82,35)
if all the values in (type(i) for i in my_sequence) == int:
do()
Au lieu de, dites:
my_sequence = (2,5,7,82,35)
all_int = True
for i in my_sequence:
if type(i) is not int:
all_int = False
break
if all_int:
do()
Utilisation:
all( type(i) is int for i in lst )
Exemple:
In [1]: lst = range(10)
In [2]: all( type(i) is int for i in lst )
Out[2]: True
In [3]: lst.append('steve')
In [4]: all( type(i) is int for i in lst )
Out[4]: False
[Éditer]. Fait plus propre selon les commentaires.
Tu veux dire
all( type(i) is int for i in my_list )
?
Edit: remplacé par is
. Un peu plus vite.
Je voudrais suggerer:
if all(isinstance(i, int) for i in my_list):
all
et any
sont apparus pour la première fois en 2006 avec Python 2.5 (fonctionnalité implémentée par Raymond Hettinger) .
Si vous utilisez une ancienne version de Python, les liens fournissent des exemples d'implémentations.
Je suggère également d'utiliser isinstance
car il attrapera également les sous-classes de int
.
Par souci d'exhaustivité, j'ai pensé ajouter le fait que "tout" de NumPy est différent du "tout" intégré. Si, par exemple, exécutez Python via Python (x, y), NumPy est chargé automatiquement (et ne peut pas être déchargé pour autant que je sache), donc lorsque vous essayez d'exécuter le code ci-dessus, cela produit plutôt inattendu résultats:
>>> if (all(v == 0 for v in [0,1])):
... print 'this should not happen'
... this should not happen
Plus d'informations à ce sujet dans la question Stack Overflow numpy tous diffèrent de tout intégré. Comme solution, vous pouvez soit entourer le générateur de crochets pour produire une liste:
>>> all( [v == 0 for v in [0,1]] )
False
Ou appelez explicitement la fonction intégrée:
>>> __builtins__.all(v == 0 for v in [0,1,'2'])
False
J'ai trouvé un moyen d'empêcher Spyder d'importer NumPy par défaut: Liste d'importation du module par défaut Spyder