如何获取列表列表中位置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])))
答案 0 :(得分:3)
您还可以将max
与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
的工作方式是指定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))