麻烦使用max(list)

时间:2013-12-07 13:07:09

标签: python python-2.7

我试图使用max()func在给定列表中查找最大值。 我从txt文件创建给定列的列表(表示一个表,每行有一个名称和相同数量的数据列)。 例如 - 约翰,男,53,175,8000(姓名,性别,年龄,身高,工资) 问题是,我不知道该列是否包含数字或字符串。如果列包含整数,那么它看起来像这样(例如): [ '1', '40', '5', '520', '1025'] 在这种情况下,max()函数正在比较第一个数字并返回错误的值('520')。 这是相关代码 - (一切都在一个类中) 第一个功能。正在返回一个给定列的列表。 第二个返回具有给定列的最大值的名称/名称。

def get_column(self,colname):
    if colname not in self.columns:
        raise ValueError('Colname doesnt exists')
    col_indx = self.columns.index(colname)+1
    col_data = []   
    for i in range(len(self.names)):            
        col_data.append(self.data[i][col_indx])     
    return col_data 

def get_row_name_with_max_value(self,colname):
    if colname not in self.columns:
        raise ValueError('Colname doesnt exists')
    col_list = self.get_column(colname)
    max_val = max(col_list)
    counter = col_list.count(max_val)
    max_name = []
    k = -1
    for i in range(counter):
        index = col_list.index(max_val, k+1)
        max_name.append(self.data[index][0])
        k = index
    return ', '.join(max_name)

非常感谢!

2 个答案:

答案 0 :(得分:3)

您可以使用max()函数的键参数将比较指定为整数:

In [1]: l = [1,'2',3,'100']

In [2]: max(l, key = int)
Out[2]: '100'

您可能也希望将int()应用于输出。

答案 1 :(得分:1)

在调用max之前,检查您的列表是否仅包含数字字符串,如果是这种情况,请使用key=int

def kmax(col):
    key = int if all(x.isdigit() for x in col) else str
    return max(col, key=key)

print kmax(['1','40','5','520','1025']) # 1025
print kmax(['foo','bar','40','baz']) # foo