Python中值存在仍触发list.index ValueError问题求助
问题解决:获取子列表第三个元素最大值的索引
原代码存在两个关键问题:
vertex[:][2]是错误写法:vertex[:]会创建整个列表的副本,[2]是取副本的第3个元素(即单个子列表),而非所有子列表的第3个元素。这导致你实际是在某一个子列表里找最大值的索引,一旦最大值不在这个子列表里,index()就会抛出找不到值的错误。- 求最大值的写法冗余:
max([vertex[i][2]] for i, _ in enumerate(vertex))[0]完全可以简化为max(v[2] for v in vertex),前者每次生成单元素列表再取第一个,完全没必要。
正确写法
直接遍历列表,记录最大值对应的索引:
max_val = -float('inf') closest_vertex = 0 for idx, sub_list in enumerate(vertex): current = sub_list[2] if current > max_val: max_val = current closest_vertex = idx
或者用更简洁的一行写法(可读性稍弱):
closest_vertex = max(enumerate(vertex), key=lambda x: x[1][2])[0]
原代码初始能运行的原因
只是刚好最大值出现在vertex[2]这个子列表里,所以vertex[:][2].index(...)能找到值,一旦最大值位置变化,就会触发报错。
内容的提问来源于stack exchange,提问作者Mattia Demontis
相关产品推荐
相关产品推荐

