我正在尝试编写一个通用函数来在序列中添加/相乘项

发布于 2024-12-03 14:58:22 字数 342 浏览 0 评论 0原文

我正在尝试在Python中编写一个带有4个参数的函数

def sequence(operation, start, n, term):

,其中操作是一个函数,开始是序列的开始编号,n是序列的最后一个数字,术语是操作序列中术语的函数。

例如,

>>> sequence(add, 2, 10, square)

将返回 2, 3, 4, ..., 10 的平方和,

假设:

def square(x):
    return x * x

I'm trying to write a function with 4 arguments in python

def sequence(operation, start, n, term):

where operation is a function, start is the beginning number of the sequence, and n is th last number of the sequence, term is function that manipulates the terms in the sequence.

For example

>>> sequence(add, 2, 10, square)

would return the summation of the square of 2, 3, 4, ..., 10

given that:

def square(x):
    return x * x

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

素手挽清风 2024-12-10 14:58:22
reduce(lambda a,b: a+b, map(square, range(2,11)))
reduce(lambda a,b: a+b, map(square, range(2,11)))
貪欢 2024-12-10 14:58:22
def sequence(operation, start, n, term):
    return reduce(operation, map(term, range(start, n+1)))

Python中的range函数是半开的,即。 range(start, stop) 返回从 start 到 stop-1 的整数列表。因此,例如:

>>> range(2,10)
[2,3,4,5,6,7,8,9]

因此,要解决您的问题,您需要 range(start, n+1)。

要将函数“term”应用于此范围内的每个整数,您可以使用内置函数映射,例如:

>>> map(square,range(2,11))
[4, 9, 16, 25, 36, 49, 64, 81, 100]

函数的最后部分需要内置函数reduce,该函数将一个函数、一个可迭代对象和一个可选函数作为其参数初始值(在本例中不需要)。

reduce 将给定函数应用于可迭代的前两个元素;然后,它将函数应用于第一次计算的结果和可迭代的第三个元素,依此类推。

因此,例如:

>>> from operator import add
>>> reduce(add, [4, 9, 16, 25])

... 相当于:

>>> add( add( add(4, 9), 16), 25)

... 并且:

>>> reduce(add, [4, 9, 16, 25, 36, 49, 64, 81, 100])

... 相当于:

>>> add( add( add( add( add( add( add( add(4, 9), 16), 25), 36), 49), 64), 81), 100)   
def sequence(operation, start, n, term):
    return reduce(operation, map(term, range(start, n+1)))

The range function in Python is half-open ie. range(start, stop) returns a list of integers from start to stop-1. So, for example:

>>> range(2,10)
[2,3,4,5,6,7,8,9]

Therefore, to solve your problem you would need range(start, n+1).

To apply the function "term" to each integer in this range you would use the built-in function map eg:

>>> map(square,range(2,11))
[4, 9, 16, 25, 36, 49, 64, 81, 100]

The final part of the function requires the built-in function reduce which takes as its arguments a function, an iterable and an optional initial value (which is not required in this instance).

reduce applies the given function to the first two elements of the iterable; it then applies the function to the result of the first calculation and the third element of the iterable and so on.

So, for example:

>>> from operator import add
>>> reduce(add, [4, 9, 16, 25])

... is equivalent to:

>>> add( add( add(4, 9), 16), 25)

... and:

>>> reduce(add, [4, 9, 16, 25, 36, 49, 64, 81, 100])

... is equivalent to:

>>> add( add( add( add( add( add( add( add(4, 9), 16), 25), 36), 49), 64), 81), 100)   
忆离笙 2024-12-10 14:58:22

您可以使用 Python 内置函数 range< 单行定义序列/code>、reducemap

You can define sequence in one-liner using Python Built-in functions range, reduce and map.

梦魇绽荼蘼 2024-12-10 14:58:22
from operator import add,mul

def square(x):  return x * x


def sequence(oper,m,n,func):
    if oper not in (add,mul):
        return None
    return reduce(lambda a,b: oper(a,func(b)),
                  xrange(m,n+1),
                  0 if oper==add else 1)


print sequence(add, 3,4, square)
print sequence(mul,2,3,square)
print sequence('qq',10,110,square)

结果

25
36
None
from operator import add,mul

def square(x):  return x * x


def sequence(oper,m,n,func):
    if oper not in (add,mul):
        return None
    return reduce(lambda a,b: oper(a,func(b)),
                  xrange(m,n+1),
                  0 if oper==add else 1)


print sequence(add, 3,4, square)
print sequence(mul,2,3,square)
print sequence('qq',10,110,square)

result

25
36
None
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文