函数平方二维数组python

时间:2018-04-10 18:12:17

标签: python list

我有一个函数,它接收任何2-d数组并返回2-d数组(与正在实现的数组格式相同)但值是平方的。 即[[1,2],[3,4]] -----> [[1,4],[9,16]]

到目前为止我的代码:

m0 = [[1,2],[3,4]]
empty_list = []
for x in m0:
   for i in x:
     empyt_list.append(x**2)

这给了我一个1-d数组,但是如何将2-d数组作为推算值返回?

3 个答案:

答案 0 :(得分:1)

使用外部列表

关键是你需要一个额外的列表来存储列。因此,我们可以引入我们构建的临时列表并添加为rows

m0 = [[1,2],[3,4]]
result = []
for sublist in m0:
    row = []
    for item in sublist:
        row.append(item**2)
    result.append(row)

请注意,我们在此处迭代item的{​​{1}}。

使用列表理解

然而,我们可以用列表理解

更优雅地写出来
sublist
  

注意:如果您必须对数字result = [[x*x for x in sublist] for sublist in m0] 求平方,则使用x,然后编写x * x通常会更有效。

使用x ** 2(对于矩形列表)

如果列表是矩形的(所有子列表都具有相同的长度),我们可以改为使用numpy:

numpy

答案 1 :(得分:1)

您可以创建一个递归函数来处理任何深度的嵌套列表:

def SquareList(L):
    if type(L) is list:
        return [SquareList(x) for x in L]
    else:
        return L**2

示例:

 > print(SquareList([1,[3],[2,[3]],4]))
 [1, [9], [4, [9]], 16]

答案 2 :(得分:0)

你可以通过列表理解来做到这一点:

empty_list = [[m0[i][j]**2 for j in range(len(m0[i]))] for i in range(len(m0))]

或者喜欢你的Codestyle:

empty_list = m0

for i in range(len(m0)):
    for j in range(len(m0[i])):
        empty_list[i][j] = m0[i][j] ** 2

您的问题是您从未创建过2D列表,只需将值附加到创建的1D列表中。