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.
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
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.
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)
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!)
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: "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