我试图找到数组中第一列的最大/最小值,而不是导入任何东西
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,这是不正确的
答案 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
创建一个生成器,然后迭代它。无需对mn
或mx
进行任何人工初始化。内存效率高,只迭代一次列:
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)