2016-04-02 41 views
1

これで、Pairwise Comparisonとして知られる投票用紙を数える方法を書こうとしています。私は、言葉のあらゆる意味においてコードを書くことについて、私が完全な初心者であると指定しなければならない。これまでのところ、私はこのサイトの他のユーザーのおかげで投票用紙を作成し、それらをポジションに応じてランク分けしました。次に、それらを別々のリストに分けて、各順序ペアの候補がランクに関係なく一緒になるようにする必要があります(これは、候補者が他人と比較してどれくらいうまくやっているかを判断する方法の一部です)。ここに私がこれまで持っているコードはあります:ペアワイズ比較:1つのリスト内のサブリストを比較する

import itertools 
import random 
import collections 
candidates = ['Trump', 'Cruz', 'Rubio', 'Carson', 'Fiorina'] 
def simul_ballots(num_voters): 
    ballots = [] 
    choice = candidates[:] 
    for _ in range(num_voters): 
     random.shuffle(choice) 
     ballots.append(choice[:]) 
    return ballots 
n=3 
ballots = simul_ballots(n) 
i=0 
m=0 
oPairs = [] 
while i < n: 
    for a, b in itertools.combinations(ballots[i], 2): 
     x = (a,b) 
     x 
     ops = list(x) 
     oPairs.append(ops) 
    i += 1 
oPairs 

l = len(oPairs)-1 
k=0 
j=(k+1) 
while (k < l): 
    print oPairs[k] 
    while (j < l): 
     #if all (x in oPairs[i] for x in oPairs[j]): 
     if (set(oPairs[k])==set(oPairs[j])): 
      print oPairs[j] 
      j+=1 
    k+=1 

これまで私はこの最後のセクションに固執しています。私は、サブリストのそれぞれを他のものと比較する方法を理解できないように思えます(反復なしでは、私が始めたのと同じ量のサブリストを持つことが重要です)。この例では、テスト目的のために、同じ候補者を使用して3人の順序付きペアを配置する必要があります(後で候補者をスコア付けする必要があります)。

答えて

0

I '

collectionsをインポートしたので、Counterがペアワイズ比較の結果を集計するのに適したツールであることがわかっているようですが、私はこのコードを使って、 d缶の対を反復する

その後
for can1, can2 in combinations(candidates, 2): 

を、各投票用紙を反復:使用didates

for ballot in ballots: 

can1が投票用紙に最初に表示されている場合、彼らはポイントを得るには、他のcan2はポイントを取得します。これは、で確認することができます:投票用紙は(ちょうどこの1ペアのために)集計され

if ballot.index(can1) < ballot.index(can2): 

can1は、より多くの票を獲得した場合、彼らはポイントを取得し、それ以外のcan2は、より多くの票を獲得した場合、彼らはポイントを取得し、それ以外の彼らはどちらも半分になる。

from collections import Counter 

vote_counter = Counter() 

for can1, can2 in combinations(candidates, 2): 
    count1, count2 = 0, 0 

    for ballot in ballots: 
     if ballot.index(can1) < ballot.index(can2): 
      count1 += 1 
     else: 
      count2 += 1 

    if count1 > count2: 
     vote_counter[can1] += 1 
    elif count1 < count2: 
     vote_counter[can2] += 1 
    else: 
     vote_counter[can1] += 0.5 
     vote_counter[can2] += 0.5 

ように見えるかもしれませんすべて一緒にこれを置きます