Quand j'ai essayé de réduire la quantité de code en l'écrivant de manière agréable à l'aide de l'opérateur de comparaison, je suis tombé dans un endroit inattendu, je vais donc le laisser comme un mémorandum.
moi même
python a les opérateurs de comparaison suivants, qui sont utilisés pour les instructions conditionnelles telles que le branchement.
opérateur | résultat |
---|---|
x < y | Vrai si x est inférieur à y |
x <= y | Vrai si x est inférieur ou égal à y |
x > y | Vrai si x est supérieur à y |
x >= y | Vrai si x est supérieur ou égal à y |
x == y | Vrai si les valeurs de x et y sont égales |
x != y | Vrai si les valeurs x et y ne sont pas égales |
x is y | Vrai si x et y sont le même objet |
x is not y | Vrai si x et y ne sont pas le même objet |
x in y | Vrai si x est contenu dans y |
x not in y | Vrai si x n'est pas inclus dans y |
Il existe d'autres opérateurs logiques tels que les suivants, et il est possible de créer une instruction conditionnelle avec un degré élevé de liberté en les combinant.
opérateur | résultat |
---|---|
x and y | Renvoie y lorsque x est vrai et y est également vrai. Renvoie x lorsque x est faux |
x or y | Renvoie x lorsque x est vrai. Renvoie y lorsque x est faux |
not x | Renvoie False si x est True, True si x est False |
Dans le cas de «et» ou «ou», il est important que le côté gauche soit vrai ou faux. Vous pouvez facilement vérifier cela avec bool
.
bool Bien sûr, True et False renverront le même résultat.
>>> bool(True)
True
>>> bool(False)
False
Dans le cas du type numérique, True est renvoyé à l'exception de 0.
>>> bool(1)
True
>>> bool(0)
False
>>> bool(-1)
True
>>> bool(0.5)
True
>>> bool(1j)
True
>>> bool(0j)
False
>>> bool(-1j)
True
Le type de chaîne est True si le caractère est présent.
>>> bool('')
False
>>> bool('hoge')
True
>>> bool(' ')
True
Notez que cela ne cherche pas si une ** instance de str a été créée **.
>>> type('')
<class 'str'>
None Aucun n'est également traité comme faux.
>>> bool(None)
False
Le tableau renvoie True lorsqu'il y a un ou plusieurs éléments.
>>> bool([])
False
>>> bool([""])
True
>>> bool([None])
True
Comme nous l'avons vu, c'est assez facile, mais la mise en garde est que ** les éléments ne renvoient pas toujours True lorsqu'ils existent **.
Avant d'expliquer ce que cela signifie, j'ai résumé ci-dessous les conditions pour devenir Faux.
>>> bool(False)
False
>>> bool(0)
False
>>> bool('')
False
>>> bool(None)
False
>>> bool([])
False
Pour autant que je puisse voir cela, s'il n'y a pas de contenu, il est probable que ce soit faux.
J'ai donc exécuté le code suivant.
>>> import numpy as np
>>> hoge = None
>>> fuga = True
>>> if fuga:
... hoge = np.arange(10)
>>> bazz = hoge if hoge else list(range(10))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
** Erreur de jour de pluie! ** ** Ce que je voulais personnellement faire, c'est qu'il y ait une fonction qui génère un ndarray lorsque l'expression conditionnelle (fuga) est True, et une autre fonction détermine si hoge est généré et le régénère ou le laisse tel quel. Je voulais l'utiliser.
En guise de solution, j'ai utilisé Aucun comme critère au lieu de vérifier si une instance a été créée.
>>> import numpy as np
>>> hoge = None
>>> fuga = True
>>> if fuga:
... hoge = np.arange(10)
>>> bazz = hoge if hoge is not None else list(range(10))
>>> bazz
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
Cependant, dans ce cas, hoge est retourné même si quelque chose d'autre que ndarray est généré dans hoge, donc si vous voulez le limiter à ndarray, vous devez le considérer ...
Il existe une fonction intégrée appelée ʻis instance` pour vérifier si le contenu de hoge est ndarray, donc vous pouvez vérifier en l'utilisant.
>>> hoge = np.arange(10)
>>> hoge
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>>
>>> isinstance(hoge, np.ndarray)
True
>>>
>>> hoge = None
>>> fuga = True
>>> if fuga:
... hoge = np.arange(10)
...
>>>
>>> bazz = hoge if isinstance(hoge, np.ndarray) else list(range(10))
>>> bazz
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>>
>>> bazz = hoge if isinstance(hoge, list) else list(range(10))
>>> bazz
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
J'ai été surpris que False soit retourné lorsque la bibliothèque externe a été jugée par bool. Eh bien, je ne suis pas doué pour essayer d'écrire étrangement ... J'ai bien conscience que je n'ai pas assez de connaissances pour le maîtriser, mais je veux me consacrer chaque jour sans me décourager (・ ∀ ・)
Comment écrire une branche conditionnelle par instruction if en Python
Recommended Posts