我有一个函数,它接收任何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数组作为推算值返回?
答案 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列表中。