5

我只是尝试学习列表推导和 Lambda 函数。我想我理解这个概念,但我被赋予了创建一个程序的任务,当输入一个正整数时,该程序会创建单位矩阵。基本上,如果我喂食 2 它会给我: [[1, 0],[0, 1]] 如果我给它 3: [[1, 0, 0],[0, 1, 0], [0 , 0, 1] 所以在一个列表中列出。

现在我需要在 lambda 函数中创建这一切。所以如果我输入:

FUNCTIONNAME(x) 它将检索大小为 x×x 的单位矩阵。

顺便说一句,x 总是一个正整数。

这是我到目前为止所拥有的:

FUNCTIONNAME = lambda x: ##insertCodeHere## for i in range(1, x)

我认为我做得对,但我不知道。如果有人有想法请帮忙!

4

3 回答 3

6

怎么样:

>>> imatrix = lambda n: [[1 if j == i else 0 for j in range(n)] for i in range(n)]
>>> imatrix(3)
[[1, 0, 0], [0, 1, 0], [0, 0, 1]]

1 if j == i else 0是 Python 的条件表达式的一个例子。

于 2013-08-15T08:08:08.230 回答
4

这将是我最喜欢的方式:

identity = lambda x: [[int(i==j) for i in range(x)] for j in range(x)]

它利用了True映射到 1 和False映射到 0 的事实。

于 2013-08-15T08:14:53.427 回答
3

只是为了完整性(并强调一个真正应该如何在 python 中做数值的东西):

import numpy
list_eye = lambda n: numpy.eye(n).tolist()

当然,在实践中,您可能只是单独使用eye(n)并使用 numpy 数组。

于 2013-08-15T08:32:27.393 回答