Als ich versuchte, die Codemenge zu reduzieren, indem ich sie mit dem Vergleichsoperator auf nette Weise schrieb, stolperte ich an einer unerwarteten Stelle, sodass ich sie als Memorandum belassen werde.
mich selber
Python verfügt über die folgenden Vergleichsoperatoren, die für bedingte Anweisungen wie Verzweigungen verwendet werden.
Operator | Ergebnis |
---|---|
x < y | True, wenn x kleiner als y ist |
x <= y | True, wenn x kleiner oder gleich y ist |
x > y | True, wenn x größer als y ist |
x >= y | True, wenn x größer oder gleich y ist |
x == y | True, wenn die Werte von x und y gleich sind |
x != y | True, wenn x- und y-Werte nicht gleich sind |
x is y | True, wenn x und y dasselbe Objekt sind |
x is not y | True, wenn x und y nicht dasselbe Objekt sind |
x in y | True, wenn x in y enthalten ist |
x not in y | True, wenn x nicht in y enthalten ist |
Es gibt andere logische Operatoren wie die folgenden, und es ist möglich, eine bedingte Anweisung mit einem hohen Freiheitsgrad zu erstellen, indem diese kombiniert werden.
Operator | Ergebnis |
---|---|
x and y | Gibt y zurück, wenn x True ist und y auch True ist. Gibt x zurück, wenn x False ist |
x or y | Gibt x zurück, wenn x True ist. Gibt y zurück, wenn x False ist |
not x | Gibt False zurück, wenn x True ist, True, wenn x False ist |
Im Fall von "und" und "oder" ist es wichtig, ob die linke Seite wahr oder falsch ist. Sie können dies leicht mit bool
überprüfen.
bool Natürlich geben True und False das gleiche Ergebnis zurück.
>>> bool(True)
True
>>> bool(False)
False
Beim numerischen Typ wird True mit Ausnahme von 0 zurückgegeben.
>>> bool(1)
True
>>> bool(0)
False
>>> bool(-1)
True
>>> bool(0.5)
True
>>> bool(1j)
True
>>> bool(0j)
False
>>> bool(-1j)
True
Der Zeichenfolgentyp ist True, wenn das Zeichen vorhanden ist.
>>> bool('')
False
>>> bool('hoge')
True
>>> bool(' ')
True
Beachten Sie, dass dies nicht angezeigt wird, wenn eine ** Instanz von str ** erstellt wurde.
>>> type('')
<class 'str'>
None Keiner wird auch als falsch behandelt.
>>> bool(None)
False
Das Array gibt True zurück, wenn ein oder mehrere Elemente vorhanden sind.
>>> bool([])
False
>>> bool([""])
True
>>> bool([None])
True
Wie wir gesehen haben, ist es ziemlich einfach, aber die Einschränkung ist, dass ** Elemente nicht immer True zurückgeben, wenn sie existieren **.
Bevor ich erkläre, was es bedeutet, habe ich die Bedingungen, um falsch zu werden, unten zusammengefasst.
>>> bool(False)
False
>>> bool(0)
False
>>> bool('')
False
>>> bool(None)
False
>>> bool([])
False
Soweit ich das sehen kann, scheint es falsch zu sein, wenn es keinen Inhalt gibt.
Also habe ich den folgenden Code ausgeführt.
>>> 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()
** Regentag Fehler! ** ** ** Was ich persönlich tun wollte, ist, dass es eine Funktion gibt, die ein ndarray erzeugt, wenn der bedingte Ausdruck (fuga) wahr ist, und eine andere Funktion bestimmt, ob hoge erzeugt wird und es entweder regeneriert oder so lässt, wie es ist Ich wollte es benutzen.
Als Lösung habe ich None als Kriterium verwendet, anstatt zu überprüfen, ob eine Instanz erstellt wurde.
>>> 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])
In diesem Fall wird hoge jedoch zurückgegeben, auch wenn in hoge etwas anderes als ndarray generiert wird. Wenn Sie es also auf ndarray beschränken möchten, müssen Sie dies berücksichtigen ...
Es gibt eine integrierte Funktion namens "isinstance", mit der Sie überprüfen können, ob der Inhalt von hoge ndarray ist. Sie können ihn also mithilfe dieser Funktion überprüfen.
>>> 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]
Ich war überrascht, dass False zurückgegeben wurde, als die externe Bibliothek von Bool beurteilt wurde. Nun, ich kann nicht gut versuchen, seltsam zu schreiben ... Mir ist klar, dass ich immer noch nicht genug Wissen habe, um es zu meistern, aber ich möchte mich jeden Tag widmen, ohne entmutigt zu werden (・ ∀ ・)
Wie man eine bedingte Verzweigung mit einer if-Anweisung in Python schreibt
Recommended Posts