Adventskalender der Universität Kinki 2019, Tag 10 Ich war sehr überrascht, dass der Adventskalender, den ich mit einem leichten Gefühl begann, den ganzen Tag gefüllt war. Ich bin allen Beteiligten sehr dankbar, danke.
In diesem Artikel zeige ich Ihnen, was ich mit Python gemacht habe. Außerdem werde ich das verlassen, was ich recherchiert habe, als ich von NaN abhängig war. Ich möchte auf mich selbst zurückblicken und andererseits Lehrer werden.
Nachdem sich ein Bekannter an Python gewöhnt hatte und versuchte, im pythonischen Stil zu schreiben, sagte er: "In Python ist es modischer, die Gleichwertigkeit mit" ist "zu beurteilen!", Und ich habe alle "==" durch "ist" ersetzt. .. Dann scheint es richtig zu funktionieren, aber ...
== Verhaltensunterschied zwischen ist und ist == bestimmt, ob die Werte gleich sind is bestimmt, ob die Objekt-IDs gleich sind
Selbst wenn die Python-Zeichenfolgen und -Listen denselben Wert haben, kann die Objekt-ID unterschiedlich sein. (Ich habe das Gefühl, dass die Zeichenkette bei der Eingabe von Japanisch mit "ist" seltsam ist.) Wenn Sie also mit "ist" urteilen, wird "Falsch" zurückgegeben, auch wenn der Wert derselbe ist, und Sie werden süchtig danach.
left = "Python"
# ==Beurteilung
left == "Python"
# > True
#ist Urteil
left is "Python"
# > False
Python kann Strings und Arrays mit *
multiplizieren.
"Oder ein" * 10
# 'Ora Ora Ora Ora Ora Ora Ora Ora Ora'
[0] * 10
# [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Wenn Sie es jedoch als zweidimensionales Array damit generieren, geraten Sie in die Falle der Referenzkopie. Ich habe das nicht bemerkt und es schmolz lange ... Ich denke, es ist besser, in Listeneinschlussnotation zu schreiben, ohne sie seitlich zu tragen.
two_d_list = [[0] * 10] * 10
# [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
# [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
# [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
# [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
# [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
# [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
# [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
# [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
# [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
# [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
# [0,0]Ich möchte nur den Wert von hinzufügen
two_d_list[0][0] += 1
# [1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
# [1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
# [1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
# [1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
# [1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
# [1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
# [1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
# [1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
# [1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
# [1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Im Gegensatz zu C in Python ist die for-Anweisung ein Mechanismus, der über Sequenztypen iteriert. Also bin ich süchtig danach, Folgendes zu tun.
Ich denke, ich muss den ersten aufgeben ... Die zweite kann mithilfe der Slice-Notation gelöst werden
num_list = list(range(1, 4))
#Es macht keinen Sinn, mit der Zielliste in der Mitte zu spielen
for i in num_list:
print(i)
i += 1
# 1
# 2
# 3
#Mit Scheiben in einer Schleife anhängen
for i in num_list[:]:
num_list.append(i)
# [1, 2, 3, 1, 2, 3]
Wenn Sie eine kleine Berechnung haben oder etwas ausprobieren möchten, rufen Sie häufig den Python-Interprinter von Ihrem Terminal aus an. Wenn Sie jedoch die Eingabetaste drücken, können Sie nicht mehr zurückgehen und häufig sagen: "Oh, ich habe einen Fehler im Variablennamen gemacht" oder "Oh, ich habe einen Fehler im Einzug gemacht". Also fing ich an, "ipython" zu verwenden. ipython wird empfohlen, da es dem Standardinterprinter als interaktive Umgebung überlegen ist, in der Sie Befehle in einer Umgebung ausführen können, in der Sie Code in Zellen ausführen, mit denen Sie in jupyter notebook vertraut sind.
Dies hängt hauptsächlich mit AtCoder zusammen, aber wenn die Python-Version 3.4 oder niedriger ist, befindet sich die Funktion gcd
nicht im Mathematikmodul (die aktuelle AtCoder Python 3-Version ist 3.4).
Die Funktion "gcd" befindet sich seit 3.5 im Mathematikmodul, und frühere Versionen befinden sich im Modul "Brüche" und müssen verwendet werden. Es mag trivial sein, aber es war ein ziemlicher Wettkampfprofi, der die Zeit von einer Minute und einer Sekunde verpasst hat.
# 3.Dies kann nicht für 4 oder weniger verwendet werden
from math import gcd
# 3.Verwenden Sie dies vor 4(3.Nicht empfohlen nach 5)
from fractions import gcd
NaN
a bit pattern of a single-precision or double-precision real number data type that is a result of an invalid floating point operation. Übersetzung: Bitmuster vom realen Datentyp mit einfacher oder doppelter Genauigkeit, das das Ergebnis einer ungültigen Gleitkommaoperation ist Aus IEEE 754
Ich habe immer gedacht, dass die Funktion, die NaN in Pandas bestimmt, df.isnan ()
(?) Ist.
Es ist eigentlich "df.isnull ()". Math.isnan ()
und numpy.isnan ()
sind auch nützlich für die individuelle Bestimmung.
np.nan == np.nan # is always False! Use special numpy functions instead.
NaN hat eine Eigenschaft, dass es im numerischen Vergleich False und eine äquivalente Operation mit allem zurückgibt (es ist auch von dieser Eigenschaft, dass es im Vergleich zu sich selbst False zurückgibt), aber als Referenz verglichen wird, ist kein numerischer Vergleich. Dieser Grundsatz gilt nicht. Python hat jedoch zwei Arten von NaN, math.nan und numpy.nan, die unterschiedliche Objekt-IDs haben.
#Vergleich zwischen NaNs mit ist
math.nan is math.nan
# True
#NaN im Mathematikmodul
id(math.nan)
# 4538852576
#NaN in der Numpy-Bibliothek
id(np.nan)
# 4569389960
Diese können jedoch jedes NaN mit einer Funktion in einer separaten Bibliothek korrekt bestimmen.
#Jeder isnan()NaN kann anhand der Funktion richtig beurteilt werden
math.isnan(np.nan) and np.isnan(math.nan)
# True
Ich war neugierig, um welche Art von Implementierung es sich handelt, also habe ich nachgeschlagen.
Die Implementierung von math.nan scheint der Implementierung von C aus [cpython] zu folgen (https://github.com/python/cpython/blob/c4cacc8c5eab50db8da3140353596f38a01115ca/Include/pymath.h). Informationen zur Implementierung von C finden Sie auf dieser Site.
#define Py_IS_NAN(X) isnan(X)
NumPy-Kernbibliotheken zeigt, dass es der C99-Implementierung folgt.
.. c:function:: int npy_isnan(x) This is a macro, and is equivalent to C99 isnan: works for single, double and extended precision, and return a non 0 value is x is a NaN.
Mit anderen Worten, die Objekt-ID ist unterschiedlich, aber die ursprüngliche Implementierung ist in C dieselbe, sodass sie gleich funktioniert. Irgendwie habe ich es erwartet, aber ich bin froh, wenn ich es tatsächlich bestätigen kann!
Die Frist für die Anzeigenpflege ist begrenzt, aber iCould ist schlecht, da es auch die Sicherung behindert und 3 Tage für die Sicherung von etwa 25 G benötigt.
Recommended Posts