Что такое функция вычитания, которая похожа на sum () для вычитания элементов в списке? - PullRequest
7 голосов
/ 01 апреля 2012

Я пытаюсь создать калькулятор, но у меня возникают проблемы при написании функции, которая будет вычитать числа из списка.
Например:

class Calculator(object):
    def __init__(self, args):
        self.args = args

    def subtract_numbers(self, *args):
        return ***here is where I need the subtraction function to be****

Кроме того, я могу просто использовать return sum(args) для вычисления суммы, но я не уверен, что я могу сделать для вычитаний.

Ответы [ 2 ]

12 голосов
/ 01 апреля 2012
from functools import reduce  # omit on Python 2
import operator

a = [1,2,3,4]

xsum = reduce(operator.__add__, a)  # or operator.add
xdif = reduce(operator.__sub__, a)  # or operator.sub

print(xsum, xdif)
## 10 -8

reduce(operator.xxx, list) в основном "вставляет" оператор между элементами списка.

5 голосов
/ 01 апреля 2012

Это зависит именно то, что вы имеете в виду. Вы можете просто вычесть сумму остальных чисел из первого, например:

def diffr(items):
    return items[0] - sum(items[1:])

Трудно сказать, потому что при вычитании это зависит от порядка, в котором вы вычитаете; однако, если вычесть слева направо, как в стандартном порядке операций:

x0 - x1 - x2 - x3 - ... - xn = x0 - (x1 + x2 + x3 + ... + xn)

, что соответствует интерпретации кода, определяющей diffr() выше.

Похоже, что, возможно, в контексте вашего калькулятора, x0 может быть вашей промежуточной суммой , в то время как параметр args может представлять числа от x1 до xn. В этом случае вы просто вычли бы sum(args) из вашей текущей суммы. Может быть, я читаю слишком много в ваш код ... Я думаю, вы поняли, да?

...