Calendrier de l'Avent de l'Université de Kinki 2019 Jour 10 J'ai été très surpris que le calendrier de l'Avent, que j'ai commencé avec une sensation de légèreté, soit rempli toute la journée. Je suis très reconnaissant à tous ceux qui ont participé, merci.
Dans cet article, je vais vous montrer ce que j'ai fait avec Python. Aussi, je laisserai ce que j'ai recherché quand j'étais accro à NaN. J'aimerais regarder en arrière sur moi-même et devenir professeur d'autre part.
Après s'être habitué à Python, en essayant d'écrire Pythonic, une connaissance a dit: "En Python, il est plus à la mode de juger de l'équivalence avec ʻis!", Et j'ai remplacé tout
== par ʻis
. ..
Ensuite, cela semble fonctionner correctement, mais ...
== Différence de comportement entre is et is == détermine si les valeurs sont égales détermine si les identifiants des objets sont égaux
Même si les chaînes et les listes Python ont la même valeur, l'identifiant de l'objet peut être différent. (Je pense que ʻis est étrange quand le japonais est entré dans la chaîne de caractères), donc si vous faites un jugement avec ʻis
, False sera retourné même si la valeur est la même, et vous en serez accro.
left = "python"
# ==Jugement
left == "python"
# > True
#est le jugement
left is "python"
# > False
Python peut multiplier les chaînes et les tableaux avec «*».
"Ora" * 10
# 'Ora Ora Ora Ora Ora Ora Ora Ora Ora'
[0] * 10
# [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Cependant, si vous le générez comme un tableau à deux dimensions avec cela, vous tomberez dans le piège de la copie de référence. Je n'ai pas remarqué cela et ça a fondu pendant longtemps ... Je pense qu'il vaut mieux écrire en notation d'inclusion de liste sans la porter de côté.
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]Je veux ajouter uniquement la valeur de
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]
Contrairement à C en Python, l'instruction for est un mécanisme qui itère sur les types de séquence. Donc, je suis accro à faire ce qui suit.
Je pense que je dois abandonner le premier ... Le second peut être résolu en utilisant la notation de tranche
num_list = list(range(1, 4))
#Il ne sert à rien de jouer avec la liste cible au milieu
for i in num_list:
print(i)
i += 1
# 1
# 2
# 3
#Ajouter dans une boucle à l'aide de tranches
for i in num_list[:]:
num_list.append(i)
# [1, 2, 3, 1, 2, 3]
Si vous avez un petit calcul ou quelque chose que vous voulez essayer, vous appelez souvent l'interpréteur Python depuis votre terminal. Cependant, une fois que vous appuyez sur Entrée, vous ne pouvez pas revenir en arrière et dire souvent: "Oh, j'ai fait une erreur dans le nom de la variable" ou "Oh, j'ai fait une erreur dans le retrait." J'ai donc commencé à utiliser ʻi python`. ipython est recommandé car il est supérieur à l'interpréteur par défaut en tant qu'environnement interactif où vous pouvez exécuter des commandes dans un environnement où vous exécutez du code dans des cellules que vous connaissez dans jupyter notebook.
Ceci est principalement lié à AtCoder, mais si la version Python est 3.4 ou inférieure, la fonction gcd
n'est pas dans le module math (la version actuelle d'AtCoder Python 3 est 3.4).
La fonction gcd
est placée dans le module mathématique depuis 3.5, et les versions antérieures sont dans le module fractions et doivent être utilisées. C'est peut-être anodin, mais c'était un peu un pro de la compétition qui a raté le temps d'une minute et une seconde.
# 3.Cela ne peut pas être utilisé pour 4 ou moins
from math import gcd
# 3.Utilisez ceci avant 4(3.Non recommandé après 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. Traduction: modèle binaire de type de données réel à simple ou double précision résultant d'une opération en virgule flottante non valide Depuis IEEE 754
J'ai toujours pensé que la fonction qui détermine NaN dans Pandas est df.isnan ()
(?)
C'est en fait «df.isnull ()». Math.isnan ()
et numpy.isnan ()
sont également utiles pour la détermination individuelle.
np.nan == np.nan # is always False! Use special numpy functions instead.
NaN a pour caractéristique de renvoyer False en comparaison numérique et calcul d'équivalence avec tout (c'est aussi à partir de cette caractéristique qu'il renvoie False en comparaison avec lui-même), mais est comparé par référence n'est pas une comparaison numérique. , Ce principe ne s'applique pas. Cependant, Python a deux types de NaN, math.nan et numpy.nan, qui ont des identifiants d'objet différents.
#Comparaison entre les NaN utilisant est
math.nan is math.nan
# True
#NaN dans le module mathématique
id(math.nan)
# 4538852576
#NaN dans la bibliothèque numpy
id(np.nan)
# 4569389960
Cependant, ceux-ci sont capables de déterminer correctement chaque NaN avec une fonction dans une bibliothèque distincte.
#Chaque isnan()NaN peut être jugé correctement par la fonction
math.isnan(np.nan) and np.isnan(math.nan)
# True
J'étais curieux de savoir de quel type de mise en œuvre il s'agissait, alors je l'ai recherché.
L'implémentation de math.nan semble suivre l'implémentation de C de cpython. Pour la mise en œuvre de C, reportez-vous à ce site.
#define Py_IS_NAN(X) isnan(X)
Bibliothèques de base NumPy montre qu'elle suit l'implémentation C99.
.. 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.
En d'autres termes, l'identifiant de l'objet est différent, mais l'implémentation d'origine est la même en C, donc cela fonctionne de la même manière. Je m'y attendais d'une manière ou d'une autre, mais je suis content de pouvoir le confirmer!
La date limite pour la gestion des publicités a atteint une limite, mais iCould est mauvais car il a également entravé la sauvegarde et a pris 3 jours pour sauvegarder environ 25G.