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

2024-10-01 05:05:34 发布

您现在位置:Python中文网/ 问答频道 /正文

如何获取列表列表中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

编辑:尝试将数据从第一个函数传入slider建议的函数,但我得到NameError:未定义名称'data'。我也尝试过在调用get\u 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])))

另外,如果我尝试下面的方法,然后运行它,就会得到以下错误“Position arguement follows keyword argument”。然后,我尝试在声明函数时改变值的声明顺序,但结果很混乱,特别是当我没有真正了解函数的工作方式时

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


Tags: 数据lambdakey函数列表datagetres
3条回答

分类比较合适。假设你对第二栏感兴趣:

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]

也可以将^{}key一起使用:

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的工作方式是指定二维列表、要检索的索引和要传递给max的键函数。如果没有提供key函数,则使用默认值(特别是lambda x: x[i])。你知道吗

key函数应该定义要考虑哪个列来确定2d列表的最大值。你知道吗

编辑

您在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])))

如果数据非常大,您可能需要隔离感兴趣的列,并执行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))

相关问题 更多 >