Python 列表操作和列表比较

标签 python list compare

我在编写一些代码来使用列表更新游戏中玩家得分的排名点时遇到了一些麻烦。我的第一个列表是球员所在位置的列表,例如:

results = [P2, P4, P3, P1, P5, P6]

此列表按降序排列(P2 首先,P4 第二等),并由我在程序中的其他代码确定。我的第二个列表是我想根据每个玩家的位置分配给他们的排名积分列表:

rankingPoints = [100, 50, 25, 10, 5, 0]

(P2 将获得 100,P4 将获得 50,依此类推)

最后,我有第三个列表,其中包含每个玩家的嵌套列表:

playerRank = [[P1], [P2], [P3], [P4], [P5], [P6]]

基本上我想做的是用“0”排名分数初始化“playerRank”列表中的每个玩家(玩家从 csv 文件读入列表,我无法手动用“0”初始化它们)所以它看起来像这样:[[P1, 0], [P2, 0], [P3, 0]] 等。

然后根据自己在游戏中的排名,在自己当前的排名分数上加上适量的排名分数(因为会有多场比赛,所以排名分数会不断地添加到玩家当前的排名分数之上),得到想要的结果看起来像这样:

playerRank = [[P1, 10] [P2, 100], [P3, 25], [P4, 50], [P5, 5], [P6, 0]]

对此的任何帮助将不胜感激,因为我是编程新手,并且正在努力找出其背后的代码和逻辑

谢谢

最佳答案

您可以使用 defaultdict 更新分数并使用 zip 创建游戏结果:

from collections import defaultdict
results = ['P2', 'P4', 'P3', 'P1', 'P5', 'P6']
rankingPoints = [100, 50, 25, 10, 5, 0]
d = defaultdict(int)
for a, b in zip(results, rankingPoints):
   d[a] += b

final_results = [[a, b] for a, b in sorted(d.items(), key=lambda x:x[0])]

输出:

[['P1', 10], ['P2', 100], ['P3', 25], ['P4', 50], ['P5', 5], ['P6', 0]]

虽然您可以使用 sorted(zip(results, ratingPoints), key=lambda x:x[0]) 来实现最终输出,但字典将允许您增加分数稍后节目中的每个玩家。

关于Python 列表操作和列表比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47275319/

相关文章:

python - GAE 模型 Hook 在管理服务器上不起作用。为什么?

Python杀死用户拥有的所有进程

python - 按索引调用多维 NumPy 数组时出现类型错误

css - 新的列表项应该淡入

R排列向量列表

java - 检查日期是否重叠并返回最大计数

php - 如果一个为空,如何将变量分配给两个字符串之一?

python - 尝试从某个跨度类中提取文本

c# - 如何防止列表中的项目在未填写且应为 "0"时返回 "null"?

python - 在Python中比较表中的文本