如何从列表中的对象中获取特定属性的总和?

How do I get the sum of specific attributes from objects in a list?

我有一个“Tile”对象列表,其属性定义如下:

class Tile:

    def __init__(self, water, soil):
        self.water = water
        self.soil = soil
    

Lake = Tile(20, 0)
Dirt = Tile(0, 10)
Tree = Tile(-5, -5)

这些对象填写以下列表:

environment = [Dirt, Tree, Lake, Dirt, Dirt]

有没有办法让我得到列表中所有对象的 .water.soil 的总和?

水域加起来:

sum(tile.water
    for tile in environment)

同样适用于土壤值:

sum(tile.soil
    for tile in environment)

不清楚您是否希望将它们合并:

sum(tile.water + tile.soil
    for tile in environment)

对于您的问题,首先想到的事情之一是遍历 collection 并获取土壤和水的值,如下所示:

soil = water = 0
for tile in environment:
    soil += tile.soil
    water += tile.water

如果您想将两者合并,只需修改代码,删除一个变量并将 tile.soiltile.water 添加到合并的总和中。

有更高级的方法可以做到这一点,使用 J_H 的答案中的 sum 函数,甚至使用 mapoperator.attrgetter 恶作剧,但是以你的 Python 熟练程度看来,这并不值得。

希望这对您有所帮助:)