Python 调用类方法&x27;s方法';sn层深
我正在尝试做一些与之相当的事情Python 调用类方法&x27;s方法';sn层深,python,python-3.x,methods,repeat,Python,Python 3.x,Methods,Repeat,我正在尝试做一些与之相当的事情 a=[[[[[1,2,3,4,5]]]]] res = a.pop().pop().pop() 这将返回[[1,2,3,4,5]],但我希望能够执行pop序列n次,所以类似 范围(n)内的u的a.pop()不能作为其在a对象上的调用pop()而不是a.pop()对象上的调用pop() 关于如何在python中实现这一点,有什么线索吗?如果有,它将被称为什么,以供将来参考?我能找到的最接近的是*运算符,它将list()转换为单独的参数 我不想这样做(忽略边缘情况)
a=[[[[[1,2,3,4,5]]]]]
res = a.pop().pop().pop()
这将返回[[1,2,3,4,5]]
,但我希望能够执行pop序列n次,所以类似
范围(n)内的u的a.pop()
不能作为其在a
对象上的调用pop()而不是a.pop()
对象上的调用pop()
关于如何在python中实现这一点,有什么线索吗?如果有,它将被称为什么,以供将来参考?我能找到的最接近的是*运算符,它将list()转换为单独的参数
我不想这样做(忽略边缘情况):
您可以使用递归。此函数获取一个列表和要执行的POP数,并返回结果
a = [[[[[1, 2, 3, 4, 5]]]]]
def pop_n(l, n):
item = l.pop()
if n < 2:
return item
else:
return pop_n(item, n-1)
res = pop_n(a, 3)
print(res)
# [[1, 2, 3, 4, 5]]
a=[1,2,3,4,5][]]
def pop_n(左、右):
item=l.pop()
如果n<2:
退货项目
其他:
返回pop\n(项目,n-1)
res=pop_n(a,3)
打印(res)
# [[1, 2, 3, 4, 5]]
您可以使用递归。此函数获取一个列表和要执行的POP数,并返回结果
a = [[[[[1, 2, 3, 4, 5]]]]]
def pop_n(l, n):
item = l.pop()
if n < 2:
return item
else:
return pop_n(item, n-1)
res = pop_n(a, 3)
print(res)
# [[1, 2, 3, 4, 5]]
a=[1,2,3,4,5][]]
def pop_n(左、右):
item=l.pop()
如果n<2:
退货项目
其他:
返回pop\n(项目,n-1)
res=pop_n(a,3)
打印(res)
# [[1, 2, 3, 4, 5]]
这本书很有意思,但我不建议你做我在下面写的,因为它不可读
首先,您不想显式地创建函数。您需要一个类似列表理解的表达式来完成此操作。这是规则
那个么我怎样才能实现嵌套函数呢?在数学中,它被称为函数组合(例如,f(g(h(x))
,函数为f(x)
,g(x)
,h(x)
)。在Python中,我能想到的唯一一件足够接近这一点的事情是reduce
。您可以将函数列表缩减为单个“reduced”函数。我的解决方案是:
import functools
a=[[[[[1,2,3,4,5]]]]]
five = functools.reduce(
lambda f,g: lambda x: f(g(x)),
[lambda x: x.pop() for _ in range(5)],
lambda x:x
)(a)
您将获得上面的five==5
。它将从最里面的列表中弹出最后一个元素
让我解释一下上面的内容:
functools.reduce()
是为了创建一个函数f(f(f(f(a)щщ)
,它f(x)
被定义为x.pop()
。它嵌套了五次,所以我在functools.reduce()的第二个参数中使用了range(5)
- 第一个参数是嵌套
- 第三个参数是创建一个返回自身的函数。这个想法是为了最里面的
f(a)
,我们需要将它表示为一个嵌套函数。因此它是f(g(a))
,其中g(a)=a
和f(a)=a.pop()
- 整个过程返回的是一个可调用的对象,所以我们用参数
a
调用它来执行它
- 本质上,这相当于使用通过标识lambda函数访问的
a
运行a.pop().pop().pop().pop().pop().pop()
是的,很复杂,也很难阅读。但是它可以用Python来完成。这本书很有趣,但我不建议你做我下面写的,因为它不可读
首先,你不想显式地创建一个函数。你想用一个类似列表理解的表达式来实现这一点。这是规则
那么我该如何做嵌套函数呢?在数学中,它被称为函数组合(例如,f(g(h(x))
,对于函数f(x)
,g(x)
,h(x)
)。在Python中,我能想到的唯一接近这一点的是reduce
。您可以将函数列表简化为一个“reduced”功能。我的解决方案是:
import functools
a=[[[[[1,2,3,4,5]]]]]
five = functools.reduce(
lambda f,g: lambda x: f(g(x)),
[lambda x: x.pop() for _ in range(5)],
lambda x:x
)(a)
您将获得上面的five==5
。它将从最里面的列表中弹出最后一个元素
让我解释一下上面的内容:
functools.reduce()
是为了创建一个函数f(f(f(f(a)щщ)
,它f(x)
被定义为x.pop()
。它嵌套了五次,所以我在functools.reduce()的第二个参数中使用了range(5)
- 第一个参数是嵌套
- 第三个参数是创建一个返回自身的函数。这个想法是为了最里面的
f(a)
,我们需要将它表示为一个嵌套函数。因此它是f(g(a))
,其中g(a)=a
和f(a)=a.pop()
- 整个过程返回的是一个可调用的对象,所以我们用参数
a
调用它来执行它
- 本质上,这相当于使用通过标识lambda函数访问的
a
运行a.pop().pop().pop().pop().pop().pop()
是的,很复杂,也很难阅读。但是可以用Python来完成。有什么原因你不想使用for循环。可以使用什么呢?你可以定义一个包含循环的函数,然后你就不必每次都写循环了。我不能在for循环中完成,因为我正在处理的项目实际上是一个非常复杂的循环的一部分ested for loop本身。控制流有点奇怪,但它阻止我重新构造整个项目流。本质上,它不是.pop(),而是一种不同的方法,其中参数更改每个迭代的ex.filter(更改_值)这毫无意义。你可以有嵌套的循环,你不需要重新构造任何东西。你不想使用for循环有什么原因吗?可以使用什么?你可以定义一个包含循环的函数,然后你就不必每次都写循环了。我不能在for循环中这样做,因为我正在处理的项目实际上是p一种非常嵌套的for循环本身的艺术。控制流有点奇怪,但它阻止我重新构造整个项目流。本质上,它不是.pop(),而是一种不同的方法,其中参数更改每个迭代的ex.filter(更改_值)这是没有意义的。你可以有嵌套的循环,你不需要重新构造任何东西。这更多的是什么