如何在 Python 中处理嵌套列表?我在弄清楚语法时遇到问题。像例子:
>>> l = [[1, 2, 3], [5, 6, 7]]
我想将此列表中的所有元素平方。我试过了:
[m*m for m in l]
但这不起作用并抛出:
TypeError:不能将序列乘以“列表”类型的非整数
因为我猜是嵌套列表?
我该如何解决?
如何在 Python 中处理嵌套列表?我在弄清楚语法时遇到问题。像例子:
>>> l = [[1, 2, 3], [5, 6, 7]]
我想将此列表中的所有元素平方。我试过了:
[m*m for m in l]
但这不起作用并抛出:
TypeError:不能将序列乘以“列表”类型的非整数
因为我猜是嵌套列表?
我该如何解决?
>>> l = [[1, 2, 3], [5, 6, 7]]
>>> [[e*e for e in m] for m in l]
|-nested list-|
|---- complete list ---|
[[1, 4, 9], [25, 36, 49]]
[[1,2,3],[4,5,6]] != [1,2,3,4,5,6]
[map(lambda x: x *x,sl) for sl in l] #List comprhension
假设您希望答案如下所示:
[[1, 4, 9], [25, 36, 49]]
你可以这样做:
l = [[1, 2, 3], [5, 6, 7]]
for x in range(len(l)):
for y in range(len(l[x])):
l[x][y] = l[x][y] * l[x][y]
print l
显然,列表理解答案更好。
您需要的是一个递归函数,如下所示:
def square(el):
if type(el) == list:
return [square(x) for x in el]
else:
return el**2;
我宁愿不讨论type(el) == list
这里的正确性,但你明白了要点。
当然,这也可以通过列表理解来实现,因为许多人都有指针,只要结构始终相同。此递归函数可以处理任何级别的递归,以及包含列表和数字的列表。