0

私はプログラミングが初めてで、python は私が学んだ最初の言語です。

私が聞きたい質問は、リスト内のアイテムの頻度をどのように数えて、「PARTY_INDICES」で順番に合計するかということです。私の場合はそうです。

これは、私がする必要があることのドキュメント文字列です:

''' (list of str) -> tuple of (str, list of int) 
votes is a list of single-candidate ballots for a single riding. 
Based on votes, return a tuple where the first element is the name of the party 
winning the seat and the second is a list with the total votes for each party in 
the order specified in PARTY_INDICES.

>>> voting_plurality(['GREEN', 'GREEN', 'NDP', 'GREEN', 'CPC']) 
('GREEN', [1, 3, 0, 1])
'''

PARTY_INDICES = [NDP_INDEX, GREEN_INDEX, LIBERAL_INDEX, CPC_INDEX] であるため、これにより、勝者 (この場合は「GREEN」) と頻度のリストのタプルが生成されます。[1, 3, 0, 1]

これらは、グローバル変数、リスト、および辞書です。

#  The indices where each party's data appears in a 4-element list.
NDP_INDEX = 0
GREEN_INDEX = 1
LIBERAL_INDEX = 2
CPC_INDEX = 3

# A list of the indices where each party's data appears in a 4-element list.
PARTY_INDICES = [NDP_INDEX, GREEN_INDEX, LIBERAL_INDEX, CPC_INDEX]

# A dict where each key is a party name and each value is that party's index.
NAME_TO_INDEX = {
  'NDP': NDP_INDEX,
  'GREEN': GREEN_INDEX,
  'LIBERAL': LIBERAL_INDEX,
  'CPC': CPC_INDEX
}

# A dict where each key is a party's index and each value is that party's name.
INDEX_TO_NAME = {
  NDP_INDEX: 'NDP',
  GREEN_INDEX: 'GREEN',
  LIBERAL_INDEX: 'LIBERAL',
  CPC_INDEX: 'CPC'
}

これは私の仕事です:

def voting_plurality(votes):
    my_list = []
    my_dct = {}
    counter = 0
    for ballot in votes:
        if (ballot in my_dct):
            my_dct[ballot] += 1
        else:
            my_dct[ballot] = 1

    if (my_dct):
        my_dct = my_dct.values()
        new_list = list(my_dct)

    return (max(set(votes), key = votes.count), new_list)

戻ります:

>>> voting_plurality(['GREEN', 'GREEN', 'NDP', 'GREEN', 'CPC'])
('GREEN', [1, 1, 3])

しかし、投票のないパーティーも含めて、PARTY_INDICES [1、3、0、1]で順番に並べたい

私のコードはナンセンスに見えるかもしれませんが、私は本当に立ち往生して混乱しています。

また、何もインポートできません。

4

1 に答える 1

0

あなたが抱えている主な問題は2つあります。1つ目はゼロを攻略しなければならないということですが、「自由党」には票がないのでゼロが反映されません。

ティップ辞書を初期化する必要があるかもしれません。

2 番目の問題は、任意の順序ではない dict.values() を呼び出していることです。ディクショナリを使用する必要がありPARTY_INDICES、正しく並べられた番号のリストを作成する必要があります。

ティップPARTY_INDICIESディクショナリ内のキーとリスト内のそれぞれの位置を参照できるかもしれません

これらのヒントから何か思いつくかどうかを確認し、質問を更新してください。できない場合は、最終的に誰かが完全な回答を投稿すると確信しています。

4時間経ったので、解決策は次のとおりです。

def voting_plurality(votes):
    sums = dict(zip(INDEX_TO_NAME.values(), [0] * len(INDEX_TO_NAME)))
    for vote in votes:
        if vote in sums:
            sums[vote] += 1
        else:
            print "Bad vote: %s" % vote
    votes_by_index = sorted([(NAME_TO_INDEX[k], v) for k, v in sums.items()])
    votes_by_rank = sorted(votes_by_index, key=lambda x: x[1], reverse=True)
    votes_by_parts = [item[1] for item in votes_by_index]
    highest_votes = INDEX_TO_NAME[votes_by_rank[0][0]]
    return (highest_votes, votes_by_parts)
于 2012-11-22T02:49:07.313 に答える