Python嵌套列表问题:为何无法移除所有最低分值元素?
问题:移除列表中所有最低分元素的代码未达预期效果
我的代码
if __name__ == '__main__': records = [] smallest = 0 fat = int(input()) for x in range(fat): name = input() score = float(input()) records.append([name, score]) records.sort(key=lambda x:x[1]) print(records) for i in range(len(records)-3): if records[i][1] <= records[i+1][1]: del records[i] else: '' print(records)
输入内容
6 Jorge 3 Mia 3 Gus 5 Myles 4 Gerald 9 Fred 8
当前输出
[['Mia', 3.0], ['Gus', 5.0], ['Gerald', 9.0]]
我需要移除列表中所有分值最低的元素,但代码未实现预期效果,请问原因是什么?
问题分析及原因
1. 遍历逻辑完全偏离需求
你写的for i in range(len(records)-3)是固定次数的循环(输入6条数据时仅循环3次),和“移除所有最低分元素”的目标毫无关联。而且在遍历列表时直接删除元素会导致索引混乱:比如删除第0个元素后,原第1个元素会变成新的第0个,但循环的i会继续递增,直接跳过了这个元素,无法处理所有同分值项。
2. 判断条件无法识别最低分
records[i][1] <= records[i+1][1]这个相邻元素比较的逻辑,不能用来定位所有最低分元素。排序后最低分集中在列表最前端,正确的思路应该是先提取最低分的数值,再批量移除所有等于该分值的元素,而非拿相邻项做比较。
3. 代码结构存在不规范问题
最后一行print(records)不在if __name__ == '__main__':的缩进块内,虽然不影响当前功能,但属于不符合Python规范的写法。
内容的提问来源于stack exchange,提问作者Ski
相关产品推荐
相关产品推荐

