Я знаком со встроенной функцией sum () для списков и использовал ее раньше, например:
sum(list1[0:41])
, когда список содержит целые числа, но я нахожусь в ситуации, когда у меня естьэкземпляры класса, и мне нужно, чтобы они суммировались.
У меня есть этот класс:
class DataPoint:
def __init__(self, low, high, freq):
self.low = low
self.high = high
self.freq = freq
Все они ссылаются на числа с плавающей точкой из файла XML, и эти экземпляры позже попадают в список в моем коде.
Так, например, я хочу иметь возможность сделать что-то вроде:
sum(list[0:41].freq)
, где список содержит экземпляры класса.
Я также пытаюсь получить его в цикле, чтобы второе число в диапазоне суммы () увеличивалось каждый раз, например:
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)
Я в основном пытаюсь создать словарь бросков кубиков, чтобы ключи моего основного словаря соответствовали данным.Частота моего класса относится к вероятностям применения определенных бинов и определяется броском игральных костей (случайным числом).Вот для чего нужно суммирование.
Может быть, это поможет прояснить мое намерение?«I» в примере суммирования будет любым количеством точек данных для определенной переменной.
Как только у меня появятся словари, в которых выбраны броски в цикле вывода (здесь не показано), я будуПримените его к приведенному ниже коду, чтобы сделать что-то осмысленное.
Дайте мне знать, если по-прежнему есть какая-то путаница в моем намерении.Я опробую некоторые из этих предложений, но, может быть, кто-то может разобрать их до самой простой формы, учитывая то, что я предоставил.
Спасибо!