Ich mag die Einschlussnotation von Python, also habe ich sie mit der Karte verglichen

Einführung

Hallo, das ist Manabindung. Es besteht kein Zweifel, dass es eine vielseitige, lesbare und wunderbare Grammatik unter den Notationen von Programmiersprachen mit vielen Einschlüssen in Python ist (es ist eine individuelle Meinung und kann sehr voreingenommen sein), aber in der Wettbewerbsprogrammierung ist es oft: Sie können die Notation von sehen.

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

Es ist der Feind der Einschlussnotation "Karte" (Vorurteil (weggelassen)). Die Karte, die von "Liste" gebissen werden muss, ist das, was sie ist! Also habe ich die Geschwindigkeit verglichen.

Umgebung

Verwenden Sie Ubuntu von 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

Überblick

1 10000 Bereiten Sie eine Textdatei mit nicht negativen Ganzzahlwerten in Zeilen und 5 Spalten vor. Schreiben Sie am Anfang 10000, um die Anzahl der Spalten in der Datei festzulegen. Verwenden Sie time () im Zeitmodul 2, um die Startzeit aufzuzeichnen. Speichern Sie Daten in Einschlussnotation oder Karte für jede 3-Zeile. Nachdem Sie 4 data.append wiederholt haben, ermitteln Sie die Zeit mit time (), ermitteln Sie die Differenz zum Wert von 2 und zeigen Sie sie als Ausführungszeit an. 5 Versuchen Sie es ungefähr 5 Mal und vergleichen Sie die Durchschnittswerte.

Skript

Verwenden Sie das folgende Skript.

Einschlussnotation


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)

Überprüfung

Versuchen Sie es ungefähr fünf Mal und denken Sie an den Durchschnitt. Erstens ist die Einschlussnotation. Nun, es ist fair.

Einschlussnotation


$ 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

Ist es durchschnittlich 0,09541? Als nächstes kommt die Karte.

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

Dies entspricht im Durchschnitt auch 0,09541. (Nein, es gibt keinen signifikanten Unterschied ... Ich dachte, ich würde einen Artikel schreiben, weil die Einschlussnotation langsam ist!)

Zusätzliche Überprüfung

Ich habe es mit Razpai 4 gemacht.

$ 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

Wenn Sie den Durchschnitt berechnen, beträgt die Einschlussnotation ungefähr 0,1217 und die Karte ungefähr 0,1786. Inklusive Notation ist hier dominant geworden.

Ich habe es unter Windows gemacht.

> 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 Ups ~~ Es gab einen deutlichen signifikanten Unterschied, aber es scheint, dass es je nach Betriebssystem einige Unterschiede gibt.

Fazit

Fazit: "Es ist leicht, von der Umwelt und der Situation beeinflusst zu werden, und ich kann nicht sagen, was besser ist. Ist es so Ich dachte, dass die Karte häufiger verwendet wird, weil sie offensichtlich schneller ist, aber das scheint nicht der Fall zu sein. Oder wird es einen Unterschied bei anderen Architekturen und Betriebssystemen geben ... Wird sich dies ändern, wenn die Eingabe auf sys.stdin gesetzt wird, kann die anstehende Wiederherstellung an erster Stelle langsam sein und der Unterschied kann verborgen sein, wie ist die Speichereffizienz usw. Es scheint einige Überprüfungselemente zu geben, aber ich möchte es hier beenden. Vielen Dank, dass Sie so weit gelesen haben. Welche Partei bist du?

Recommended Posts

Ich mag die Einschlussnotation von Python, also habe ich sie mit der Karte verglichen
W3C-Validatoren haben mit Sublime Text3 nicht funktioniert, also habe ich es zum Laufen gebracht
Ich blieb stecken und überprüfte es
Ich habe einen SSL-bezogenen Fehler bei der Pip-Installation erhalten und ihn behoben.
Ich habe über Docker recherchiert und werde es zusammenfassen
Ich habe mit Python eine Hex-Map erstellt
Ich habe Pythons Iterator und Rubys Enumerator verglichen
# Ich habe so etwas wie Vlookup mit Python # 2 ausprobiert
Ich konnte AWS-Batch mit Python, Moto verspotten, also werde ich es verlassen
Ich habe es mit Visual Studio Code (hauptsächlich für Python) angepasst, daher werde ich es zusammenfassen
Versuchen Sie, eine Karte mit Pythons Folium-Paket zu zeichnen
Ich habe eine Fehlermeldung erhalten, als ich Pandas auf einem Mac installiert habe, also habe ich mich damit befasst
Ich wollte die Google-Tabelle mit AWS Lambda betreiben, also habe ich es versucht [Teil 2]
Ich mag es nicht, mit der Veröffentlichung von Pokemon Go frustriert zu sein, deshalb habe ich ein Skript erstellt, um die Veröffentlichung zu erkennen und zu twittern