Python对嵌套列表排序时出现条目重复问题的原因是什么?
问题原因
你编写的列表推导式使用了两层嵌套for循环,会生成两个列表的笛卡尔积:每个名字都会和score列表中的所有分数逐一匹配,5个名字×5个分数最终生成25条冗余重复的条目,不符合「名字与对应位置的分数配对」的预期。
修正方案
使用zip()函数将两个列表同位置的名字和分数一一配对,再对生成的嵌套列表按第二项(分数)排序即可,修正代码如下:
name = ['Harry', 'Berry', 'Tina', 'Akriti', 'Harsh'] score = [37.21, 37.21, 37.2, 41.0, 39.0] # 同位置元素配对生成初始嵌套列表 mylist = [[title, grade] for title, grade in zip(name, score)] # 按嵌套列表的第二项(分数)排序 test = sorted(mylist, key=lambda x:x[1])
执行后test的输出结果为:
[['Tina', 37.2], ['Harry', 37.21], ['Berry', 37.21], ['Harsh', 39.0], ['Akriti', 41.0]]
内容的提问来源于stack exchange,提问作者Angus Campbell
相关产品推荐
相关产品推荐

