列表列表中位置x的最大值

时间:2018-11-18 04:44:18

标签: python list max

如何获取列表列表中位置x的最大值,并将其与位置0的数据一起返回?我当前列表的样本粘贴在下面。我当时正在考虑制作另一个包含我想要的元素的列表,然后对该列表进行排序,但我想这样做会更好

当前正在输出数据

[['Name1', '1 (5)', '0', '0', '0', 'TeamPos', 'TeamA'], 
 ['Name2', '13 (0)', '5', '4', '0', 'TeamPos', 'TeamB'], 
 ['Name3', '4 (1)', '2', '1', '0', 'TeamPos', 'TeamC']]

预期输出为-可以说我想要索引2中所有列表的最大值

Name2, 5

编辑:尝试将数据从我的第一个函数传递到滑块建议的函数中,并且出现NameError:未定义名称“ data”。我也曾尝试在调用get_max时传递,但那也不起作用

def get_max(lst, i, key_func=None):

    data = squads()

    if not key_func: key_func = lambda x: x[i]
    res = max(lst, key=key_func)
    return [res[0], res[i]]

print(get_max(data,2, lambda x: int(x[2])))

此外,如果我尝试以下操作,然后运行它,则会收到以下错误消息:“位置争辩出现在关键字参数后面。我试图在声明函数时改变声明值的顺序,但变得混乱,特别是当我不真正了解此功能的工作原理时

print(get_max(data = squads(),2,lambda x:int(x [2])))

3 个答案:

答案 0 :(得分:3)

您还可以将maxkey一起使用:

data = [['Name1', '1 (5)', '0', '0', '0', 'TeamPos', 'TeamA'], 
        ['Name2', '13 (0)', '5', '4', '0', 'TeamPos', 'TeamB'], 
        ['Name3', '4 (1)', '2', '1', '0', 'TeamPos', 'TeamC']]

def get_max(lst, i, key_func=None):
    if not key_func: key_func = lambda x: x[i]
    res = max(lst, key=key_func)
    return [res[0], res[i]]

print(get_max(data, 2, lambda x: int(x[2])))
# ['Name2', '5']

print(get_max(data, 6))
# ['Name3', 'TeamC']

get_max的工作方式是指定2维列表,要检索的索引以及要传递给max的键函数。如果未提供键功能,则使用默认值(特别是lambda x: x[i])。

键功能应该定义要考虑的列,以确定二维列表的最大值。

修改

您正在data函数内部定义get_max,但是在函数外部使用它。将其更改为以下内容:

def get_max(lst, i, key_func=None):
    if not key_func: key_func = lambda x: x[i]
    res = max(lst, key=key_func)
    return [res[0], res[i]]

data = squads()
print(get_max(data,2, lambda x: int(x[2])))

答案 1 :(得分:1)

排序很合适。假设您对第二栏感兴趣:

POS = 2
maximal = sorted(your_list, key=lambda x: x[POS])[-1]
[maximal[0], maximal[POS]]
#['Name2', '5']

请记住,sorted以字典顺序对字符串进行排序。如果要将列视为数字,请在排序时将其转换为数字:

maximal = sorted(your_list, key=lambda x: int(x[POS]))[-1]

答案 2 :(得分:0)

如果数据非常大,则可能需要隔离感兴趣的列并进行max的“惰性”运行:

list_of_lists = [..] # your data
target_idx = 2
col_of_interest = ((lst[target_idx], idx) for idx, lst in enumerate(list_of_lists))
max_val, location = max(col_of_interest)
print (list_of_lists[location][0], max_val)
# Name2 5

这不会生成任何中间列表(或其列表的列表)。

@Austin指出,由于项目是字符串,因此max()可能无法提供所需的结果,在这种情况下,您可能希望使用int()对惰性列进行预组织:

col_of_interest = ((int(lst[target]), idx) for idx, lst in enumerate(list_of_lists))