您好我正在完成这项任务。
我想用更好的分数提取列表的一半(越小越好)。 例如:
s=[[1,2,3],[1,3,2],[2,1,3,[3,1,2],[3,2,1],[2,3,1]]
列表s的对应分数是
score=[13,14,24,28,17,17]
我的愿望输出是: ss应该只包含3个
ss =[[1,2,3],[1,3,2],[3,2,1]]
或
ss =[[1,2,3],[1,3,2],[2,3,1]]
。因为最后两个列表具有相同的分数
答案 0 :(得分:0)
为了实现这一目标,您可以执行以下步骤:
scores
列表并获得最低n
分数s
列表中n
列表中scores
个最小数字的出现次数,从list.index(..)
列表中获取元素下面是使用列表理解和>>> s=[[1,2,3],[1,3,2],[2,1,3],[3,1,2],[3,2,1],[2,3,1]]
>>> score=[13,14,24,28,17,17]
>>> smallest_num_count = 3 # count of desired numbers
# Get lowest three scores v slice list from the start
>>> smallest_scores = sorted(score)[:smallest_num_count]
# ^ sorts the `score` list in ascending order
# v returns index of the first occurrence of the
# v `i` element in `score` lsit
>>> [s[score.index(i)] for i in smallest_scores]
[[1, 2, 3], [1, 3, 2], [3, 2, 1]]
方法实现它的示例代码(步骤被提及为注释):
cleartool lsstream -fmt "%n" -cview
答案 1 :(得分:0)
尝试:
[i for i, j in sorted(zip(s, score), key=lambda x: x[1])[:3]]