python - 尝试获取列表列表中最大 y 值的总和([[x,y],[x,y]......)

标签 python

我正在尝试获取列表列表中每个“x”值的最大“y”之和。

示例:

l = [[1,29],[1,28],[2,30],[2,27]] 对于上面的列表,总和结果应为:29+30(x = 1 的最大 y 和 x = 2 的最大 y)

最佳答案

使用 dictionary累计每个x的最大y:

l = [[1, 29], [1, 28], [2, 30], [2, 27]]

d = {}
for x, y in l:
    if x not in d:
        d[x] = y
    else:
        d[x] = max(d[x], y)


res = sum(d.values())
print(res)

输出

59

另一种方法是使用 collections.defaultdict :

from collections import defaultdict

l = [[1, 29], [1, 28], [2, 30], [2, 27]]

d = defaultdict(lambda: float("-inf"))
for x, y in l:
   d[x] = max(d[x], y)


res = sum(d.values())
print(res)

输出

59

请注意,第二种方法之所以有效,是因为:

float("-inf") < x 

适用于任何整数x。两种方法的复杂度都是 O(n)。

更新

如果x的唯一值的数量很小(并且表示一组连续的索引),第三种替代方法是使用列表而不是字典来存储最大y如下:

l = [[1, 29], [1, 28], [2, 30], [2, 27]]

cols = 2
d = [0 for _ in range(8)]  # here 8 is the number of columns in your game 
for x, y in l:
   d[x - 1] = max(d[x - 1], y)

res = sum(d)
print(res)

输出

59

请注意,此替代方案的工作原理是假设 y 值始终为正数(正如人们对俄罗斯方 block 游戏的列所期望的那样)。

关于python - 尝试获取列表列表中最大 y 值的总和([[x,y],[x,y]......),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70126213/

相关文章:

python - 如何通过运行 Fargate ECS 任务查看 Python 打印语句?

python - 有没有办法在 seaborn 点图中设置透明度/alpha 级别?

Python lambda自组合函数: How to return a function that is repeated n amount of times?

python - 如何防止 QTabWidget 滚动按钮获得焦点?

c++ - 将 C++ 头文件转换为 Python

python - 具有不同条件语句的函数返回

Python + Xbee - 解释模拟样本的二进制数据

Python 日期时间与时间戳的相互转换

python - 在 AWS Lambda Python 函数上设置 Shapely

python - 从 Python shell 运行 Python 脚本