gpt4 book ai didi

Python:对列表中的类实例求和

转载 作者:行者123 更新时间:2023-11-28 20:27:56 24 4
gpt4 key购买 nike

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

sum(list1[0:41])

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

我有这个类:

class DataPoint:
def __init__(self, low, high, freq):
self.low = low
self.high = high
self.freq = freq

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

例如,我希望能够做类似的事情:

sum(list[0:41].freq)

其中列表包含类实例。

我还试图让它进入一个循环,以便 sum() 范围内的第二个数字每次都上升,例如:

for i in range(len(list)):
sum(list[0:i+1].freq)

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

谢谢!

更新:

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

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

我基本上是在尝试创建一个骰子字典,以将我的主字典的键与数据相匹配。我的类的 freq 实例是指应用某些 bin 的概率,并由掷骰子(随机数)确定。这就是求和的目的。

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

一旦我有了在我的输出循环中选择了哪些卷的字典(此处未显示),我会将它应用到下面的代码中以产生一些有意义的东西。

如果我的意图仍有任何困惑,请告诉我。我将尝试其中的一些建议,但考虑到我提供的内容,也许有人可以将其分解为最简单的形式。

谢谢!

最佳答案

你试过吗:

sum(i.freq for i in items[0:41])

如果您需要最后“i”个元素的累加和,以下是最有效的方法:

sums = [items[0].freq]
for i in items[1:]:
sums.append(sums[-1] + i.freq)

正如其他发帖人已经预料到的那样,为变量使用内置名称是一种糟糕的编程风格;我已将上面代码中的 list 替换为 items

关于Python:对列表中的类实例求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6920653/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com