可能的重复:
稍微改变一下输出 https://stackoverflow.com/questions/13638807/changing-the-output-a-bit
问题是:
voting_borda:
(str 列表的列表) -> (str, int 列表) 的元组
该参数是一个 4 元素列表的列表,表示单个选区的排名选票。
博尔达计数是根据排名分配分数来确定的。每个第一选择排名获得3分,第二选择排名每个获得2分,第三选择排名每个获得1分。 (排名第四不会获得分数。)例如,上面显示的排名投票将为自由党计票贡献 3 分,为绿党计票贡献 2 分,为 CPC 计票贡献 1 分。获得最多分数的政党赢得席位。
返回一个元组,其中第一个元素是根据博尔达计数获胜一方的名称,第二个元素是一个四元素列表,其中包含每方的总点数。列表元素的顺序对应于 PARTY_INDICES 中各方的顺序。
这是我的代码:
def voting_borda(*args):
results = {}
for sublist in args:
for i in range(0, 3):
if sublist[i] in results:
results[sublist[i]] += 3-i
else:
results[sublist[i]] = 3-i
winner = max(results, key=results.get)
return winner, results
但是,如果我尝试
voting_borda(['GREEN','NDP', 'LIBERAL', 'CPC'],['GREEN','CPC','LIBERAL','NDP'],['LIBERAL','NDP', 'CPC', 'GREEN'])
I get,
('GREEN', {'NDP': 4, 'CPC': 3, 'GREEN': 6, 'LIBERAL': 5})
但是,我希望第一个参数成为获胜者(该部分很好),第二个参数只是值,并且也按照 PARTY_INDICES 的顺序,即PARTY_INDICES = [NDP_INDEX, GREEN_INDEX, LIBERAL_INDEX, CPC_INDEX]
.
有什么解决方案或方法可以让我做得更好吗?