Python:在列表中汇总类实例

A.K*_*ger 2 python sum class list instances

我熟悉列表的内置sum()函数,之前使用过,例如:

sum(list1[0:41])
Run Code Online (Sandbox Code Playgroud)

当列表包含整数时,但我遇到的情况是我有一个类的实例,我需要它们求和.

我有这个班:

class DataPoint:
    def __init__(self, low, high, freq):
        self.low = low
        self.high = high
        self.freq = freq
Run Code Online (Sandbox Code Playgroud)

它们都引用XML文件中的浮点数,这些实例稍后会进入我的代码中的列表.

例如,我希望能够做到这样的事情:

sum(list[0:41].freq)
Run Code Online (Sandbox Code Playgroud)

列表包含类实例.

我也试图在循环中得到它,以便sum()范围内的第二个数字每次都上升,例如:

for i in range(len(list)):
    sum(list[0:i+1].freq)
Run Code Online (Sandbox Code Playgroud)

任何人都知道如何解决这个问题,或者是否还有其他办法可以解决这个问题?

谢谢!

更新:

感谢所有回复,我将尝试提供比我首先提出的概念性内容更具体的内容:

# Import XML Parser
import xml.etree.ElementTree as ET

# Parse XML directly from the file path
tree = ET.parse('xml file')

# Create iterable item list
items = tree.findall('item')

# Create class for historic variables
class DataPoint:
    def __init__(self, low, high, freq):
        self.low = low
        self.high = high
        self.freq = freq

# Create Master Dictionary and variable list for historic variables
masterDictionary = {}

# Loop to assign variables as dictionary keys and associate their values with them
for item in items:
    thisKey = item.find('variable').text
    thisList = []
    masterDictionary[thisKey] = thisList

for item in items:
    thisKey = item.find('variable').text
    newDataPoint = DataPoint(float(item.find('low').text), float(item.find('high').text), float(item.find('freq').text))
    masterDictionary[thisKey].append(newDataPoint)

# Import random module for pseudo-random number generation
import random

diceDictionary = {}

# Dice roll for historic variables
for thisKey in masterDictionary.keys():
    randomValue = random.random()
    diceList = []
    diceList = masterDictionary[thisKey]
    for i in range(len(diceList)):
        if randomValue <= sum(l.freq for l in diceList[0:i+1]):
            diceRoll = random.uniform(diceList[i].low, diceList[i].high)
            diceDictionary[thisKey].append(diceRoll)
Run Code Online (Sandbox Code Playgroud)

我基本上试图创建一个骰子卷的字典,以匹配我的主词典的键与数据.我的班级的频率实例是指应用某些箱子的概率,并由骰子卷(随机数)确定.这就是求和的目的.

也许这有助于澄清我的意图?求和示例中的"i"将是某个变量的数据点数.

一旦我在我的输出循环中选择了哪些卷的字典(此处未显示),我将把它应用于下面的代码以使某些内容变得有意义.

如果我的意图仍然存在任何混淆,请告诉我.我会尝试一些这些建议,但考虑到我提供的内容,也许有人可以将其分解为最简单的形式.

谢谢!

Gar*_*Jax 7

你有没有尝试过:

sum(i.freq for i in items[0:41])
Run Code Online (Sandbox Code Playgroud)

如果您需要最后"i"元素的累积总和,以下是最有效的方法:

sums = [items[0].freq]
for i in items[1:]:
    sums.append(sums[-1] + i.freq)
Run Code Online (Sandbox Code Playgroud)

正如其他海报已经预料到的那样,为变量使用内置函数的名称是一种糟糕的编程风格; 我在上面的代码中替换listitems.