2010-12-11 7 views
0

Ich habe eine Funktion geschrieben, die eine Datei mit x, y Koordinaten als Eingabe nimmt und einfach die Koordinaten in Python zeigt. Ich mag ein bisschen mehr mit den Koordinaten arbeiten und hier ist mein Problem:Extrahieren von minimalen und maximalen x-Werten Python

zum Beispiel nach einer Datei erhalte ich lesen:

32, 48.6 
36, 49.0 
30, 44.1 
44, 60.1 
46, 57.7 

und ich möchte den minimalen und den maximalen x-Wert extrahieren.

Meine Funktion die Datei ist wie folgt zu lesen:

def readfile(pathname): 
    f = open(sti + '/testdata.txt') 
    for line in f.readlines(): 
     line = line.strip() 
     x, y = line.split(',') 
     x, y= float(x),float(y) 
     print line 

ich war so etwas wie die Schaffung einer neuen Funktion mit min() und max(), aber wie im ziemlich neu in Python im ein bisschen stecken denken.

, wenn ich zum Beispiel Call-min (Readfile (Pfadname)) liest er einfach die ganze Datei erneut ..

Irgendwelche Hinweise sehr geschätzt :)

Antwort

1

Sie einen Generator erzeugen soll:

def readfile(pathname): 
    f = open(sti + '/testdata.txt') 
    for line in f.readlines(): 
     line = line.strip() 
     x, y = line.split(',') 
     x, y = float(x),float(y) 
     yield x, y 

Erste das Minimum und Maximum von hier ist einfach:

points = list(readfile(pathname)) 
max_x = max(x for x, y in points) 
max_y = max(y for x, y in points) 
+2

'reduzieren' ist fast immer ein Fehler. Hier verwende 'max_x = max (x für x, y in Punkten) 'und' max_y = max (y für x, y in Punkten) ' –

+0

Danke, aktualisiert – terminus

+0

Warum sollte die Datei zweimal gelesen werden? Was ist, wenn die Datei extrem groß ist? – robert

4
from operator import itemgetter 

# replace the readfile function with this list comprehension 
points = [map(float, r.split(",")) for r in open(sti + '/testdata.txt')] 

# This gets the point at the maximum x/y values 
point_max_x = max(points, key=itemgetter(0)) 
point_max_y = max(points, key=itemgetter(1)) 

# This just gets the maximum x/y value 
max(x for x,y in points) 
max(y for x,y in points) 

minimale Werte gefunden durch Ersetzen max durch min

Verwandte Themen