<p>我还没有找到改进的方法,但是你可以把你的清单翻两遍。在外循环中,每一项都被选为候选项。在内部循环中,每个在名字或姓氏上匹配的iteam,当且仅当其得分高于当前候选项时才替换候选项进行选择。在内部循环的末尾,如果候选对象尚未插入,则将其插入到选择列表中。你知道吗</p>
<pre><code>def get_top_scorers(dataset):
if dataset and all(isinstance(d, list) for d in dataset):
return [get_top_scorers(d) for d in dataset]
selected_list = []
for candidate in dataset:
chosen = candidate
for next_candidate in dataset:
if next_candidate == chosen:
continue
next_name, next_surname, next_score = next_candidate
shares_name_with_selected = any(
next_name == s[0] or next_surname == s[1]
for s in selected_list
)
if shares_name_with_selected:
continue
name, surname, score = chosen
if (name == next_name or surname == next_surname) and score < next_score:
chosen = next_candidate
shares_name_with_selected = any(
chosen[0] == s[0] or chosen[1] == s[1]
for s in selected_list
)
if chosen not in selected_list and not shares_name_with_selected:
selected_list.append(chosen)
return selected_list
</code></pre>