сумма python () и нецелые значения

Есть ли простой и быстрый способ использования sum () с нецелыми значениями?

Поэтому я могу использовать его так:

class Foo(object): def __init__(self,bar) self.bar=bar mylist=[Foo(3),Foo(34),Foo(63),200] result=sum(mylist) # result should be 300 

Я попытался переопределить __add__ и __int__ и __int__ Д., Но я еще не нашел решение

РЕДАКТИРОВАТЬ:

Решение заключается в реализации:

  def __radd__(self, other): return other + self.bar 

как предложил Уилл в своем посте. Но, как всегда, все дороги ведут в Рим, но я думаю, что это лучшее решение, так как мне не нужен __add__ в моем классе

5 Solutions collect form web for “сумма python () и нецелые значения”

Его немного сложно – функция sum () берет начало и добавляет его к следующему и так далее

Вам необходимо реализовать метод __radd__ :

 class T: def __init__(self,x): self.x = x def __radd__(self, other): return other + self.x test = (T(1),T(2),T(3),200) print sum(test) 

Вам также может потребоваться реализовать функцию __radd__ , которая представляет «обратное добавление» и вызывается, когда аргументы не могут быть разрешены в «прямом» направлении. Например, x + y оценивается как x.__add__(y) если это возможно, но если это не существует, то Python пытается y.__radd__(x) .

Поскольку функция sum() начинается с целого числа 0 , первое, что она делает, это попытаться оценить:

 0 + Foo(3) 

который потребует, чтобы вы реализовали Foo.__radd__ .

Пытаться:

 import operator result=reduce(operator.add, mylist) 

sum () работает, вероятно, быстрее, но специализируется только на встроенных номерах. Конечно, вы все равно должны предоставить метод для добавления ваших объектов Foo (). Итак, полный пример:

 class Foo(object): def __init__(self, i): self.i = i def __add__(self, other): if isinstance(other, int): return Foo(self.i + other) return Foo(self.i + other.i) def __radd__(self, other): return self.__add__(other) import operator mylist = [Foo(42), Foo(36), Foo(12), 177, Foo(11)] print reduce(operator.add, mylist).i 

Если вы не хотите ничего импортировать,

 result=reduce( (lambda x,y:x+y), mylist 

Еще одно небольшое преимущество заключается в том, что вам необязательно объявлять метод добавления как часть ваших объектов Foo, если это единственное обстоятельство, в котором вы хотели бы добавить дополнение. (Но, вероятно, не помешало бы определить добавление для будущей гибкости.)

Попробуйте использовать метод __int__ и затем сопоставить каждый элемент в вашем списке с функцией int чтобы получить значения:

 class Foo(object): def __init__(self,bar): self.bar = bar def __int__(self): return self.bar mylist = [Foo(3),Foo(34),Foo(63),200] result = sum(map(int,mylist)) print(result) 
  • сумма матричных столбцов в python
  • python суммирует значения списков списка
  • Python эквивалент функции unix cksum
  • Сумма строк, извлекаемых из текстового файла с использованием regex
  • Python: длина строк строки
  • Ошибка malloc в f2py
  • Python 2.7: Сжатие данных в формате XZ с использованием модуля «lzma»
  • Суммирование по парам индексов (или более) в Python
  • Python - лучший язык программирования в мире.