Python在数组中查找最小值

时间:2015-10-20 03:17:26

标签: 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

我将max初始化为0并将min初始化为一些任意大的数字。我生成的代码能够打印出最大#,但最小#打印出100000,这是不正确的

2 个答案:

答案 0 :(得分:2)

看起来您的数据来自文件,因此您将字符串与数字进行比较。在python2.x中,比较的结果只能保证一致(规范并没有告诉我们实际的结果是)。

您需要将字符串转换为某种数字类型...例如first_col = float(Data[0])进行比较。

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

注意,我们可以使用内置函数和列表推导来做得更好:

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

请注意,与原始解决方案相比,我们不必指定任何人工最小值或最大值,因此这将适用于由完全负数组成的输入(例如)。

答案 1 :(得分: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)