J'aime la notation d'inclusion de Python, donc je l'ai comparée avec map

introduction

Bonjour, c'est une liaison de mana. Il ne fait aucun doute que c'est une grammaire polyvalente, lisible et merveilleuse parmi les notations des langages de programmation avec de nombreuses inclusions en Python (c'est une opinion individuelle et peut être très préjugée), mais en programmation compétitive c'est souvent: Vous pouvez voir la notation de.

l = list(map(int, input().split()))

C'est l'ennemi de la notation d'inclusion, map (préjugé (omis). J'ai comparé la vitesse car la carte que je dois mordre à chaque fois est quoi!".

environnement

Utilisez Ubuntu depuis wsl1.

$ uname -a
Linux LAPTOP-H6KC5C7N 4.4.0-18362-Microsoft #1049-Microsoft Thu Aug 14 12:01:00 PST 2020 x86_64 x86_64 x86_64 GNU/Linux
$ py --version
Python 3.8.0

Aperçu

1 10000 Préparez un fichier texte avec des valeurs entières non négatives en lignes et 5 colonnes. Écrivez 10000 au début pour faire le nombre de colonnes dans le fichier. Utilisez time () dans le module de temps «2» pour enregistrer l'heure de début. Stockez les données dans une notation d'inclusion ou une carte pour chaque ligne «3». Après avoir répété «4» data.append, obtenez l'heure avec time (), obtenez la différence par rapport à la valeur de «2» et affichez-la comme heure d'exécution. 5 Essayez environ 5 fois et comparez leurs moyennes.

scénario

Utilisez le script suivant.

Notation d'inclusion


import time

start = time.time()
n = int(input())
data = []
for _ in range(n):
    data.append([int(e) for e in input().split(" ")])
process_time = time.time() - start

print(process_time)

map


import time

start = time.time()
n = int(input())
data = []
for _ in range(n):
    data.append(list(map(int, input().split())))
process_time = time.time() - start

print(process_time)

Vérification

Essayez de l'exécuter environ cinq fois et pensez à la moyenne. La première est la notation d'inclusion. Eh bien, c'est juste.

Notation d'inclusion


$ for((i=0;i<5;i++)); do cat InputText.txt | py time_comp.py; done
0.0833895206451416
0.07289266586303711
0.08693099021911621
0.12533855438232422
0.09039974212646484

S'agit-il d'environ 0,09541 en moyenne? Vient ensuite la carte.

map


$ for((i=0;i<5;i++)); do cat InputText.txt | py time_map.py; done
0.0980367660522461
0.08674144744873047
0.11994338035583496
0.08462047576904297
0.08770060539245605

Cela équivaut également à 0,09541 en moyenne. (Non, il n'y a pas de différence significative ... je pensais écrire un article car la notation d'inclusion est lente!)

Vérification supplémentaire

Je l'ai fait avec Razpai 4.

$ uname -a
Linux asana 5.4.51-v8+ #1333 SMP PREEMPT Mon Aug 10 16:58:35 BST 2020 aarch64GNU/Linux

$ py --version
Python 3.7.3

$ for((i=0;i<5;i++)); do cat InputText.txt | py time_comp.py; done
0.12080025672912598
0.10874629020690918
0.1127462387084961
0.1103978157043457
0.15588116645812988

$ for((i=0;i<5;i++)); do cat InputText.txt | py time_map.py; done
0.11949372291564941
0.11281895637512207
0.11392450332641602
0.2708289623260498
0.276080846786499

Si vous calculez la moyenne, la notation d'inclusion est d'environ 0,1217 et la carte est d'environ 0,1786. La notation inclusive est devenue dominante ici.

Je l'ai fait sous Windows.

> cmd /c ver

Microsoft Windows [Version 10.0.18363.1110]
> py --version
Python 3.8.2

> for($i = 0;$i -le 5; $i++){cat .\InputText.txt | py .\time_comp.py}
1.0488629341125488
0.7845804691314697
1.163966178894043
0.7295846939086914
0.7399096488952637
0.8466687202453613

> for($i = 0;$i -le 5; $i++){cat .\InputText.txt | py .\time_map.py}
0.5758388042449951
0.5823671817779541
0.6683478355407715
0.6919825077056885
0.6597652435302734
0.6140100955963135

~~ Windows Oops ~~ Il y avait une nette différence significative, mais il semble qu'il y ait pas mal de différences selon le système d'exploitation.

Conclusion

En conclusion, «Il est facile d'être influencé par l'environnement et la situation, et je ne peux pas dire ce qui est le mieux. C'est comme ça? Je pensais que cette carte était utilisée plus souvent parce qu'elle était évidemment plus rapide, mais cela ne semble pas être le cas. Ou y aura-t-il une différence dans d'autres architectures et systèmes d'exploitation ... Cela changera-t-il si l'entrée est définie sur sys.stdin, la restauration en attente peut-elle être lente en premier lieu et la différence peut être masquée, quelle est l'efficacité de la mémoire, etc. Il semble y avoir des éléments de vérification, mais je voudrais terminer ici. Merci d'avoir lu jusqu'ici. Quelle fête êtes-vous?

Recommended Posts

J'aime la notation d'inclusion de Python, donc je l'ai comparée avec map
Les validateurs W3C ne fonctionnaient pas avec Sublime Text3, alors je l'ai fait fonctionner
Je suis resté coincé alors je l'ai examiné
J'ai eu une erreur liée à SSL avec l'installation de pip, donc je l'ai résolue.
J'ai fait des recherches sur Docker, donc je vais le résumer
J'ai fait une carte hexadécimale avec Python
J'ai comparé l'itérateur de Python et l'énumérateur de Ruby
# J'ai essayé quelque chose comme Vlookup avec Python # 2
J'ai pu me moquer d'AWS-Batch avec python, moto, donc je vais le laisser
Je l'ai personnalisé avec Visual Studio Code (principalement pour python), je vais donc le résumer
Essayez de dessiner une carte avec le package folium de Python
J'ai eu une erreur lorsque j'installe des pandas sur Mac, alors je l'ai traitée
Je voulais utiliser la feuille de calcul Google avec AWS lambda, alors je l'ai essayé [Partie 2]
Je n'aime pas être frustré par la sortie de Pokemon Go, j'ai donc créé un script pour détecter la sortie et le tweeter