0

问题是:

voting_borda:

(str 列表列表) -> (str, list of int) 的元组

该参数是一个 4 元素列表的列表,代表单次选区的排名投票。

博尔达计数是通过根据排名分配积分来确定的。一方每获得第一名得3分,每名第二名得2分,每名第三名得1分。(排名第四不得分。)例如,上面显示的排名投票将为自由党计数贡献 3 分,为绿色计数贡献 2 分,为 CPC 计数贡献 1 分。得分最多的一方赢得席位。

返回一个元组,其中第一个元素是根据 Borda Count 的获胜方的名称,第二个元素是一个四元素列表,其中包含每一方的总点数。列表元素的顺序对应于 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)
results_sort = sorted(results,key=lambda x:x[1],reverse=True)
return winner, results_sort

但是,如果我尝试

voting_borda(['GREEN','NDP', 'LIBERAL', 'CPC'],['GREEN','CPC','LIBERAL','NDP'],['LIBERAL','NDP', 'CPC', 'GREEN'])

我明白了,

('GREEN', {'NDP': 4, 'CPC': 3, 'GREEN': 6, 'LIBERAL': 5})

但是,我希望第一个参数是赢家(那部分很好),第二个参数只是值,并且也是 PARTY_INDICES 的顺序,即 PARTY_INDICES = [NDP_INDEX, GREEN_INDEX, LIBERAL_INDEX, CPC_INDEX].

有什么解决方案或方法可以让这变得更好吗?

4

1 回答 1

1

索引的东西(NDP_INDEX 等)真的是不必要的和非 Python 的。只需使用字符串,如果您需要根据某些内容对其进行排序,请使用元组列表。

 vv = [ ('republican',3), ('democrat',9), ('libertarian',73), ('green',-2) ]
 vsort = sorted(vv,key=lambda x:x[1],reverse=True)
 print(list(party for party, value in vsort))

你可以做类似的事情来得到你的答案。讨厌为你完成整个任务......

于 2012-11-30T04:17:57.967 回答