Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python函数式编程中实现嵌套for循环?_Python_Loops_Functional Programming - Fatal编程技术网

如何在python函数式编程中实现嵌套for循环?

如何在python函数式编程中实现嵌套for循环?,python,loops,functional-programming,Python,Loops,Functional Programming,我曾考虑过两次应用map函数,以便让它充当double for循环,但我不知道这是否有意义。 这就是解决问题的方法吗 例如,这就是我正在进行的工作: 当务之急是: def degree(A): n = len(A) t = [] for i in range(n): d = 0 for j in range(n): d+=A[i][j] t.append(d) return t 在功能方面

我曾考虑过两次应用map函数,以便让它充当double for循环,但我不知道这是否有意义。 这就是解决问题的方法吗

例如,这就是我正在进行的工作:

当务之急是:

def degree(A):
    n = len(A)
    t = []
    for i in range(n):
        d = 0
        for j in range(n):
            d+=A[i][j]
        t.append(d)

    return t
在功能方面:

def degree(A):
    n = len(A)
    t = []
    map(lambda x,y:x+y,A)
如果它是一个单for循环,那么我会像上面那样处理它。所以我试图实现一个双重映射,但我不知道如何构造它。
任何帮助都将不胜感激

您正在对内部列表
A
求和,因此只需对
A
中的每个嵌套列表应用
sum

def degree(A):
    return map(sum, A)

您还可以考虑使用列表理解或生成器表达式(取决于您是否需要在Python 2中懒洋洋地产生结果(<代码> MAP())/代码>,生成一个列表,在Python 3中它懒洋洋地工作):

否则,您可以使用生成作为笛卡尔积的
i
j
;但是,您将向可调用的映射传递一个整数元组:

from itertools import product

map(lambda ij: A[ij[0]][ij[1]] ** 2, product(range(len(A)), 2))
这可以通过使用以下方法来解决:

两者都不产生求和;我演示了一个生成最里面值的平方的
lambda
,这样就得到了一个长序列的所有值,平方,而不区分行。这就是映射的工作原理,它在输入中处理的每个项都产生一个值

您还可以嵌套
map()
调用;将内部
map()
放入外部
map()的可调用项中:

但请注意,这会在Python3中生成一个惰性对象的惰性序列。同样,在这种情况下,求和没有意义,因为没有结果的累积

对于跨序列的结果的一般累积,您希望使用;that callable对正在运行的结果和序列中的下一个值应用callable。您可以使用
lambda x,y:x+y
函数和
map()


但是对于简单的求和来说,
reduce(lambda x,y:x+y,0)
语法只是一种冗长而缓慢的拼写方法
sum()

您所做的不仅仅是有一个双循环,还可以在内部循环中创建一个和。使用
map(sum,a)可以获得同样的效果
,顺便说一句,不需要嵌套任何东西。您尝试
map()
在您的上下文中没有任何意义;您想到
reduce()
也许?
map()
会将任意数量的iterable作为输入,并将它们一起应用,但是
map(…,A)
只有一个输入,因此lambda只有一个参数。然后构建一个结果序列,而不是一个总和。
reduce()
通过对函数和输入序列的重复调用生成一个结果。因此我想知道这将如何处理a[I][j]第二部分,由双循环构成的矩阵?这两种方法都是等价的吗?@ce1:两种方法都是什么?不,
product()
方法不会产生相同的结果;当你重置
d
外循环的每次迭代时,你不能用
product()
产生相同的结果。如果行是d+=A[i][j]*X[j]如果X是传递给函数的列表,那么map(sum,a)在函数编程中会如何变化?@ce1:使用
zip()
a
中的行与
X
中的行配对:
(sum(a*X代表a,zip中的X代表a中的r,X)在生成器表达式中
,或
从操作符导入mul
中,然后
映射(lambda:sum(map(prod,r,X)),A)
如果必须在理解上使用
map()
from itertools import product

map(lambda ij: A[ij[0]][ij[1]] ** 2, product(range(len(A)), 2))
from itertools import product, starmap

starmap(lambda i, j: A[i][i] ** 2, product(range(len(A)), 2))
map(lambda r: map(lambda v: v ** 2, r), A)
map(lambda r: reduce(lambda x, y: x + y, r, 0), A)