如何处理Python中的嵌套列表?我在弄清楚语法时遇到了问题。例如:
>>> l = [[1, 2, 3], [5, 6, 7]]
我想对这个列表中的所有元素进行平方。我试过了:
[m*m for m in l]
但这不起作用并引发:
TypeError:无法乘以序列 非'int类型'list'
因为嵌套列表我猜?
我该如何解决这个问题?
答案 0 :(得分:8)
>>> 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 :(得分:1)
[[1,2,3],[4,5,6]] != [1,2,3,4,5,6]
[map(lambda x: x *x,sl) for sl in l] #List comprhension
答案 2 :(得分:0)
你需要的是一个递归函数,如下所示:
def square(el):
if type(el) == list:
return [square(x) for x in el]
else:
return el**2;
我不想在这里找到type(el) == list
的正确性,但你得到了要点。
当然,这也适用于列表理解,因为许多人都指出了,只要结构总是相同的。这个递归函数可以处理任何级别的递归,以及包含列表和数字的列表。
答案 3 :(得分:0)
假设您希望答案看起来像这样:
[[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
显然,列表理解答案更好。