Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中编写计算总分的函数?_Python - Fatal编程技术网

如何在python中编写计算总分的函数?

如何在python中编写计算总分的函数?,python,Python,如何在python中编写一个计算总分的函数 比如说, rank_list=[['Peter','Amy','John','Kitty'],['Amy','John','Kitty','Peter']] 第一名得5分,第二名得2分,第三名得0分,最后一名得9分 我想要一份统计总人数的列表这对你有用吗 In [277]: rank_list=[['Peter','Amy','John','Kitty'],['Amy','John','Kitty','Peter']] In [278]

如何在python中编写一个计算总分的函数

比如说,

      rank_list=[['Peter','Amy','John','Kitty'],['Amy','John','Kitty','Peter']]
第一名得5分,第二名得2分,第三名得0分,最后一名得9分


我想要一份统计总人数的列表

这对你有用吗

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)]

您可以使用
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()
输出:-

[('Amy', 5), ('Kitty', 1), ('Peter', 3), ('John', 3)]

使用反向列表作为索引(因为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']
获得分数。

这看起来像是一份针对以下人员的工作:


+1以获得正确的解决方案,但这无法扩展。如果存在
N>>3个
列组,会发生什么情况?你必须写一个非常大的
my_dict
@inspectorG4dget。。是的,在这种情况下,我们必须在继续之前从给定的dict中创建该秩dict。但是,你的第二条路比这更好。:)假设点是线性的(位置0得到n个点,位置1得到n-1个点,位置n得到n-n=0),您可以使用算术而不是字典<代码>排名[值]+=(最高分数-索引)@Tim。。哦,那将是一个更好的方法。谢谢你(蒂姆)
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