2010-12-11 19 views
0

x、y座標を入力としてファイルを受け取り、単にPythonで座標を表示する関数を作成しました。私は座標でもう少し仕事をしたいとここに私の問題です:最小xと最大x値の抽出Python

例えば私が取得ファイル読んだ後:

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

を、私は最小と最大のx値を抽出したいです。ファイルを読むため

My機能は、このようなものです:

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 

私は分()とmaxとの新しい関数を作成するようなものを考えていた()が、パイソンにかなり新しいイムとしてビット立ち往生イム。

私は、例えば任意のヒントが高く評価されて

...それだけで再びファイル全体を読み込む分(のReadFile(パス名))を呼び出した場合:)

答えて

1

あなたはジェネレータを作成する必要があります。

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 
ここでの最小値と最大値を取得

は簡単です:

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

と置き換えて、最小値を見つけることはほとんど間違いです。ここで 'max_x = max(xはx、yはポイント)'と 'max_y = max(yはx、yはポイント単位)'を使用します。 –

+0

ありがとう、更新済み – terminus

+0

なぜファイルを2度読みますか?ファイルが非常に大きい場合はどうなりますか? – 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) 

maxmin