2016-09-06 14 views
-1

Ich lese Zeilen aus einer Datei und möchte sie in eine Ganzzahl-Liste konvertieren.Die Datei hat eine Million Zeilen.So, ich habe mich nur gefragt, welche Prozedur es schneller machen wird.say, lst=['10','12','31','41','15'] ist die aktuelle Zeile, die aus der Datei gelesen wurde. Ich kann das Gießen tun Map-Funktion verwenden, wie- lst1=map(int,lst) oder die für die Funktion verwenden, wie- lst2=[int(x) for x in lst] Welches die effizienteste sein würde und der schnellste Weg, es zu tun?Leistungsvergleich zwischen Typ Casting-Verfahren

+0

Wenn die einzelnen Listen nicht sehr lang sind, wird die Karte nicht viel schneller sein. Wie liest du den Dateiinhalt in die einzelnen Listen ein? Auch das Timing der einzelnen Implementierungen würde Ihre Frage beantworten, so dass Sie dies wirklich selbst beantworten können. –

+0

Es gibt kein "für Funktion". Es heißt ein [Listenverständnis] (https://docs.python.org/3.5/tutorial/datastructures.html#list-comprehensions). 'map' und List Comprehensions werden eine ähnliche Performance haben. Wie auch immer, Datei-I/O wird wahrscheinlich der Flaschenhals sein. –

+1

Ich schlage vor, Sie lesen [Was ist schneller?] (Https://ericlippert.com/2012/12/17/performance-rant/) – CoryKramer

Antwort

0

[int(x, 10) for x in lst] ist zumindest deutlich schneller als die zwei Möglichkeiten:

>>> from timeit import timeit 
>>> setup = "lst = ['10','12','31','41','15']" 

>>> timeit('map(int, lst)', setup) 
4.454881024529442 

>>> timeit('[int(x) for x in lst]', setup) 
4.7153410495946275 

>>> timeit('[int(x, 10) for x in lst]', setup) 
1.6508196962672343 

Getestet mit Python 2.7.11 (Ich gehe davon aus verwenden Sie 2 Python, weil sonst Ihre lst1=map(...) irreführend wäre).

+0

Danke. Ich weiß das wirklich zu schätzen. –

+0

In Python 3 sehe ich vernachlässigbare Leistungsunterschiede. Tatsächlich bekomme ich das ursprüngliche Verständnis als etwas schneller und tatsächlich 'liste (map (int, lst))' als den schnellsten Ansatz, wiederum nur leicht. War das in Python 2 'int' ein Problem, das in Python 3 behoben wurde? –

+0

@ juanpa.arrivillaga Ja, in Python 3 bekomme ich auch nur kleine Unterschiede, alle kommen auf 1,25 Sekunden. Ich weiß nicht, warum es so sehr zwischen Python 2 und 3 unterscheidet. Ich kenne nur den Explizit-Basis-10 "Trick" von einigen "Warum ist Float schneller als Int" thread, vielleicht [das] (https: // www. reddit.com/r/Python/comments/2grsb5/why_is_int_slower_than_float_when_converting_a/) und vielleicht finden Sie dort weitere Erklärungen. –

Verwandte Themen