您可以在一个列表中包含从最高到最低的浮点值,同时更改另一个列表吗?
Can you one list containing float values from highest to lowest while simultaneously changing another list?
我有 2 个列表
lst1 = [0.9932, 0.9982, 0.9979, 0.9981, 0.9993, 0.9985, 0.9924, 0.9984, 0.9987, 0.9967, 0.995, 0.9932]
和
lst2 = ["Jane", "Tylor", "James", "Tom", "Smith", "Johnson", "Williams", "Jones", "Brown", "Davis", "Miller", "Wilson"]
我想创建一个列表,其中包含 3 个元组,然后在其中包含 2 个项目。每个 3 元组中的第二项是 lst1 中按升序排列的浮点值(lst1
中的前 3 个值),元组中的第二项是 lst2
中对应于来自 lst1
的浮点数。
所以基本上我想要
[("Smith", 0.9993),("Brown", 0.9987),(0.9985, "Johnson")]
但是,如果 lst1
中的最大值相同,那么我想按名称排序。
例如:(0.9994, "Abby")
应该在 (0.9994, "Bob")
之前
我试过:
sorted(zip(lst1, lst2), reverse=True)[:3]
这给了我
[(0.9993, "Smith"),(0.9987, "Brown"), (0.9985, "Johnson")]
即lst1
项在元组中位于 lst2
项之前。如果我交换 lst1
和 lst2
,它仍然不起作用。
改变zip中lst1和lst2的顺序,使用sorted的key参数
lst1 = [0.9932, 0.9982, 0.9979, 0.9981, 0.9993, 0.9985, 0.9924, 0.9984, 0.9987, 0.9967, 0.995, 0.9932]
lst2 = ["Jane", "Tylor", "James", "Tom", "Smith", "Johnson", "Williams", "Jones", "Brown", "Davis", "Miller", "Wilson"]
# sort in descending order by score, alphabetically by name
sorted(zip(lst2, lst1), key=lambda x: (-x[1], x[0]))[:3]
[('Smith', 0.9993), ('Brown', 0.9987), ('Johnson', 0.9985)]
我有 2 个列表
lst1 = [0.9932, 0.9982, 0.9979, 0.9981, 0.9993, 0.9985, 0.9924, 0.9984, 0.9987, 0.9967, 0.995, 0.9932]
和
lst2 = ["Jane", "Tylor", "James", "Tom", "Smith", "Johnson", "Williams", "Jones", "Brown", "Davis", "Miller", "Wilson"]
我想创建一个列表,其中包含 3 个元组,然后在其中包含 2 个项目。每个 3 元组中的第二项是 lst1 中按升序排列的浮点值(lst1
中的前 3 个值),元组中的第二项是 lst2
中对应于来自 lst1
的浮点数。
所以基本上我想要
[("Smith", 0.9993),("Brown", 0.9987),(0.9985, "Johnson")]
但是,如果 lst1
中的最大值相同,那么我想按名称排序。
例如:(0.9994, "Abby")
应该在 (0.9994, "Bob")
我试过:
sorted(zip(lst1, lst2), reverse=True)[:3]
这给了我
[(0.9993, "Smith"),(0.9987, "Brown"), (0.9985, "Johnson")]
即lst1
项在元组中位于 lst2
项之前。如果我交换 lst1
和 lst2
,它仍然不起作用。
改变zip中lst1和lst2的顺序,使用sorted的key参数
lst1 = [0.9932, 0.9982, 0.9979, 0.9981, 0.9993, 0.9985, 0.9924, 0.9984, 0.9987, 0.9967, 0.995, 0.9932]
lst2 = ["Jane", "Tylor", "James", "Tom", "Smith", "Johnson", "Williams", "Jones", "Brown", "Davis", "Miller", "Wilson"]
# sort in descending order by score, alphabetically by name
sorted(zip(lst2, lst1), key=lambda x: (-x[1], x[0]))[:3]
[('Smith', 0.9993), ('Brown', 0.9987), ('Johnson', 0.9985)]