2

宿題でこの質問に本当に固執しました。

すべてが機能しますが、 にスペース ( ' ') がある場合p。の作成プロセスを停止する必要がありますcan

たとえば、私が提出した場合:

rankedVote("21 4", [('AB', '132'), ('C D', ''), ('EFG', ''), ('HJ K', '2  1')])

私はを頂きたい:

['C D', 'AB']

[]今のようではなく、戻ってきました。

以下のようにコードします。

def rankedVote(p,cs):
    candsplit = zip(*cs)
    cand = candsplit[0]
    vote = list(p)
    ppl = vote
    can = list(p)
    for i in range(len(vote)):
        if ' ' in vote[i-1]:
            return []
        else:
            vote[i] = int(vote[i])
            can[vote[i]-1] = cand[i]

    for i in range(len(vote)):
        for j in range(len(vote)):
            if i != j:
                if vote[i] == vote[j]:
                    return []
    return can

編集:

例では:

rankedVote("21 4", [('AB', '132'), ('C D', ''), ('EFG', ''), ('HJ K', '2  1')])

これは、1 番目ABが 2 番目になり、2 番目C Dが 1 番目になることを意味し、3 番目が存在しないため停止する必要があります。

21 4ではなく、だったとしましょう2143。3 番目EFGは 4 番目、4 番目HJ Kは 3 番目ということになります。

4

2 に答える 2

0

あなたが私が言うように、コードはあなたが指示したようにやっています。以下のコード ブロックを見てください。

if ' ' in vote[i-1]:
            return []
于 2012-06-01T03:35:23.593 に答える
0

この質問は古いことは知っていますが、興味深いと思いました。

前の回答がその時点までリストを返していないと言ったように、あなたは を返してい[]ます。

あなたがすべきことは次のとおりです。

if ' ' in vote[i]:
    return can[:i]

また、 の使い方を知っているようだったので、次のようにするzipこともできます。

def rankedVote(p,cs):
    cand = zip(*cs)[0]

    # get elements before ' ' 
    votes = p.split()[0] # '21'

    # map votes index order with corresponding list order
    # (number of `cands` is determined by length of `votes`)
    cans = zip(votes, cand) # [('2', 'AB'), ('1', 'C D')]

    # Sort the results and print only the cands
    result = [can for vote, can in sorted(cans)] # ['C D', 'AB']
    return result 

出力:

>> rankedVote("21 4", [('AB', '132'), ('C D', ''), ('EFG', ''), ('HJ K', '2  1')])
['C D', 'AB']
>> rankedVote("2143", [('AB', '132'), ('C D', ''), ('EFG', ''), ('HJ K', '2  1')])
['C D', 'AB', 'HJ K', 'EFG']
于 2013-03-04T22:41:31.007 に答える