我试图使用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)
非常感谢!
答案 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