我最初有两个数组,一个包含数字,另一个是相关的值:
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
的返回值。对我来说,请效率是一个问题。
答案 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]