0

質問は:

voting_borda:

(strのリストのリスト)->(str、intのリスト)のタプル

パラメータは、1回のライディングのランク投票用紙を表す4要素リストのリストです。

ボルダ得点は、ランキングに従ってポイントを割り当てることによって決定されます。パーティーは、第1選択のランクごとに3ポイント、第2選択のランクごとに2ポイント、第3選択のランクごとに1ポイントを獲得します。(4位にランク付けされた場合、ポイントは付与されません。)たとえば、上記のランク投票用紙は、リベラルカウントに3ポイント、グリーンカウントに2ポイント、CPCカウントに1ポイント貢献します。最も多くのポイントを獲得したパーティーが席を獲得します。

最初の要素がボルダカウントによる勝者の名前であり、2番目の要素が各パーティーの合計ポイント数を含む4要素のリストであるタプルを返します。リスト要素の順序は、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})

ただし、最初のパラメーターを勝者(その部分は問題ありません)にし、2番目のパラメーターを値だけにし、PARTY_INDICESの順序にする必要があり PARTY_INDICES = [NDP_INDEX, GREEN_INDEX, LIBERAL_INDEX, CPC_INDEX]ます。

これを改善できる解決策や方法はありますか?

4

1 に答える 1

1

インデックスのこと (NDP_INDEX など) は本当に不必要で、pythonic ではありません。文字列を使用するだけで、何かに従ってソートする必要がある場合は、タプルのリストを使用してください。

 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 に答える