Vérifiez si toutes les valeurs de iterable sont nulles
Est-il bon, succinct/moyen intégré pour voir si toutes les valeurs dans un objet iterable sont des zéros? Droit maintenant, je suis en utilisant all()
avec un peu de compréhension de liste, mais (pour moi), il semble comme il devrait être plus expressif de la méthode. Je l'avais vue ce qu'un peu l'équivalent d'un memcmp()
dans C.
values = (0, 0, 0, 0, 0)
# Test if all items in values tuple are zero
if all([ v == 0 for v in values ]) :
print 'indeed they are'
Je m'attends à une fonction intégrée qui fait quelque chose comme:
def allcmp(iter, value) :
for item in iter :
if item != value :
return False
return True
Fait que la fonction existe en python et je suis juste aveugle, ou devrais-je rester avec ma version d'origine?
Mise à jour
Je ne dis pas que allcmp()
est la solution. C'est un exemple de ce que je pense peut-être plus significatif. Ce n'est pas l'endroit où je voudrais suggérer de nouvelles built-ins pour Python.
À mon avis, all()
n'est pas significative. Il ne peut pas exprimer à ce que "tous" est en train de vérifier. On pourrait supposer que all()
prend un objet iterable, mais il ne peut pas exprimer à ce que la fonction est à la recherche d' (un objet iterable bool
s que les tests de tous pour True
). Ce que je demande, c'est certaines fonctions comme la mon allcmp()
qui prend deux paramètres: un objet iterable et une valeur de comparaison. Je me demande si il y a une fonction intégrée qui fait quelque chose de similaire à mon composée allcmp()
.
J'ai appelé le mien allcmp()
à cause de mon C en arrière-plan et memcmp()
le nom de mon fait de la fonction de pertinence ici.
source d'informationauteur mjschultz
Vous devez vous connecter pour publier un commentaire.
Utiliser les générateurs plutôt que des listes dans des cas comme ça:
Edit:
all
est standard de Python intégré. Si vous voulez être efficace Python programmeur, vous devriez savoir probablement plus de la moitié d'entre eux (http://docs.python.org/library/functions.html). Faisant valoir quealltrue
est mieux que le nomall
est comme soutenant que Cwhile
devrait être appelerwhiletrue
. Est subjectif, mais je pense que la plupart des gens préfèrent des noms plus courts pour built-ins. C'est parce que vous devez savoir ce qu'ils font de toute façon, et vous avez ce type de beaucoup.Plus de Python pour les programmeurs vont comprendre le code que j'ai écrit en quelques secondes. Je vais probablement tester ce code sur mon girlfried (elle est architecte, pas un programmeur, jamais utilisé Python) et je pense qu'elle va l'obtenir. À l'aide de générateurs est mieux que d'utiliser numpy parce que les générateurs de plus élégant de la syntaxe. numpy peut être plus rapide, mais il vous permettra de bénéficier dans de rares cas (générateurs, comme je l'ai montré sont rapide, vous aurez l'avantage que si ce code est le goulot d'étranglement dans votre programme).
Vous ne pouvez probablement pas s'attendre à rien de plus descriptif à partir de Python.
PS. Voici le code si vous le faites en memcpm style (j'aime toutes les versions de plus, mais vous aimerez peut-être celle-ci:
Si vous savez que l'objet iterable va contenir que des nombres entiers, alors vous pouvez simplement faire ceci:
Si une valeur est un tableau numpy vous pouvez écrire