在2D列表中查找最长子列表的索引

时间:2016-11-20 23:55:00

标签: python arrays

我最初有两个数组,一个包含数字,另一个是相关的值:

scores =  [2,            4,     12 ... etc ]
players = ["Peter", "Brian", "Meg" ... etc]
top_score_index = scores.index(max(scores))
top_player = players[top_score_index]

这已经很臭了,因为scores.index(max(scores))显然会迭代该列表两次(在最坏的情况下)。

情况发生了变化,scores数组现在包含列表:

scores = [[something, something, something], [something, something]]

我关心的分数只是len( scores[some_offset] ),即嵌套列表的长度。

如何轻松找到这些嵌套列表中最长的索引?例如。为:

[[0,0,0],[0,0],[0,0,0,0,0,0]]

我希望2的返回值。对我来说,请效率是一个问题

3 个答案:

答案 0 :(得分:4)

scores = [[0,0,0],[0,0],[0,0,0,0,0,0]]
print(max((len(l), i) for i, l in enumerate(scores))[1])

打印2

你不能避免在每个子列表上调用len,所以我认为你无法在效率方面做得更好。

答案 1 :(得分:1)

在迭代分数时使用(idx, value)获取idx, max_val = 0, len(scores[0]) for idx, sublst in enumerate(scores): if len(sublst) > max_val: idx, max_val = idx, len(sublst) 元组。

{{1}}

答案 2 :(得分:0)

以下模式怎么样?

scores = [[0,0,0],[0,0],[0,0,0,0,0,0]]
result = max(enumerate(scores), key=(lambda x: len(x[1])))
print(result[0])
print(result[1])
>>> 2
>>> [0, 0, 0, 0, 0, 0]