-1

Pythonに従って合計ポイントをカウントする関数を作成するには?

例えば、

      rank_list=[['Peter','Amy','John','Kitty'],['Amy','John','Kitty','Peter']]

1 位で 5 ポイント、2 位で 2 ポイント、3 位で 0 ポイント、最下位で 9 ポイントが与えられます。

人の合計点をカウントするリストが欲しい

4

4 に答える 4

3

これはあなたのために働きますか?

In [277]: rank_list=[['Peter','Amy','John','Kitty'],['Amy','John','Kitty','Peter']]

In [278]: points = collections.defaultdict(int)

In [279]: for rank_lis in rank_list:
   .....:     for score, person in ran
random     range      rank_list  
   .....:     for score, person in enumerate(rank_lis[::-1]):
   .....:         points[person] += score
   .....:         

In [280]: points.items()
Out[280]: [('Amy', 5), ('John', 3), ('Kitty', 1), ('Peter', 3)]

より効率的なソリューション:

In [285]: rank_list=[['Peter','Amy','John','Kitty'],['Amy','John','Kitty','Peter']]

In [286]: for rank_lis in rank_list:
    for score, person in enumerate(rank_lis, -3):
        points[person] -= score
   .....:         

In [287]: points.items()
Out[287]: [('Amy', 5), ('Peter', 3), ('Kitty', 1), ('John', 3)]
于 2012-11-22T06:27:19.040 に答える
2

You can use defaultdict: -

rank_list=[['Peter','Amy','John','Kitty'],['Amy','John','Kitty','Peter']]
my_dict = {0:3, 1:2, 2:1, 3:0}   # Have a mapping from index to score

from collections import defaultdict

ranking = defaultdict(int)

for elem in rank_list:
    for index, value in enumerate(elem):
        ranking[value] += my_dict[index]

print ranking.items()

OUTPUT : -

[('Amy', 5), ('Kitty', 1), ('Peter', 3), ('John', 3)]
于 2012-11-22T06:32:54.473 に答える
0

逆リストをインデックスとして使用し (0 = 3、3 = 0 など)、辞書に保存します。

d = {}
for list in rank_list:
  for name in list:
    if name in d:
      d[name] = d[name] + list[::-1].index(name)
    else:
      d[name] = list[::-1].index(name)

list[::-1]リストを逆順に出力します。d['Peter']また、たとえば、印刷してスコアを取得できます。

于 2012-11-22T06:39:08.290 に答える
0

collections.Counterの仕事のようです:

from collections import Counter

rank_list=[['Peter','Amy','John','Kitty'],['Amy','John','Kitty','Peter']]
rank_by_place = (3, 2, 1, 0)

ranks = Counter()
for record in rank_list:
    for name, rank in zip(record, rank_by_place):
        ranks.update({name: rank})

print ranks.most_common()  # ordered by rank
于 2012-11-22T06:39:27.043 に答える