2015-10-20 125 views
0

我试着去寻找进口任何Python中查找最小值在阵列

max = 0 
min = 100000 

for row in _file_in.readlines(): 
    Data = row.split(',') # Load first column 
    if (Data[0] > max): 
     max = Data[0] 
    if (Data[0] < min): 
     min = Data[0] 
print min, max 

我最大初始化为0和MIN一些任意大数量的数组短的第一列的最大/最小值。我的结果代码能够打印出最大#但打印出的最小值是100000,这是不正确的

+2

你能还包括你的文件的内容? – essramos

+2

'数据[0]'是一个字符串。你应该把它转换成数字。也许使用'int' – thefourtheye

+0

你真的不应该使用'min','max'作为变量名称,因为它们与Python的内建函数冲突。 – AChampion

回答

2

它看起来像你的数据来自一个文件,所以你比较字符串和数字。在python2.x中,比较的结果只能保证一致(规范并不告诉我们实际结果)。

您需要将您的字符串转换为某种数字类型。 first_col = float(Data[0])作比较。

first_col = [float(row.split(',')[0]) for row in _file_in] 
print min(fist_col), max(first_col) 

注意我们没有指定比任何人工的最低或最高:

for row in _file_in.readlines(): 
    Data = row.split(',') # Load first column 
    first_col = float(Data[0]) 
    if (first_col > max): 
     max = Data[0] 
    if (first_col < min): 
     min = Data[0] 
    print min, max 

注意,我们可以更好地利用内置功能和列表内涵做了一大堆你的原始解决方案,所以这将适用于由完全负数组成的输入(例如)。

+0

太棒了!有没有办法将最小化初始化为10000?这似乎是不好的代码做到这一点 – Bijan

+1

@Bijan - 原来我只是输入:-)看看。 – mgilson

+1

@Bijan如果你不打算使用内建的min函数,你可以使用float('inf')'来初始化min。 – thefourtheye

2

另一种方法是,您可以为first_col创建一个生成器,然后对其进行迭代。不需要任何人工初始化mnmx。超过列一旦内存使用效率,只迭代:

first_col = (int(row.split(',')[0]) for row in _file_in) 
mn = mx = next(first_col, None) 
for i in first_col: 
    if i < mn: 
     mn = i 
    elif i > mx: 
     mx = i 
print mn, mx 

对于一个空文件,将打印(None, None)