【发布时间】:2010-12-06 20:28:16
【问题描述】:
如何在 Python 中处理嵌套列表?我在弄清楚语法时遇到问题。比如:
>>> l = [[1, 2, 3], [5, 6, 7]]
我想对这个列表中的所有元素求平方。我试过了:
[m*m for m in l]
但这不起作用并抛出:
TypeError:不能将序列乘以 'list' 类型的非 int
我猜是因为嵌套列表?
我该如何解决这个问题?
【问题讨论】:
标签: python nested-lists
如何在 Python 中处理嵌套列表?我在弄清楚语法时遇到问题。比如:
>>> l = [[1, 2, 3], [5, 6, 7]]
我想对这个列表中的所有元素求平方。我试过了:
[m*m for m in l]
但这不起作用并抛出:
TypeError:不能将序列乘以 'list' 类型的非 int
我猜是因为嵌套列表?
我该如何解决这个问题?
【问题讨论】:
标签: python nested-lists
>>> 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]]
【讨论】:
l = [[e*e for e in m] for m in l]。
假设您希望答案如下所示:
[[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
显然,列表理解答案更好。
【讨论】:
[[1,2,3],[4,5,6]] != [1,2,3,4,5,6]
[map(lambda x: x *x,sl) for sl in l] #List comprhension
【讨论】:
你需要的是一个递归函数,像这样:
def square(el):
if type(el) == list:
return [square(x) for x in el]
else:
return el**2;
我不想在这里讨论type(el) == list 的正确性,但你明白了要点。
当然,这也可以通过列表理解来实现,因为很多人都有指针,前提是结构总是相同的。此递归函数可以处理任何级别的递归,以及包含列表和数字的列表。
【讨论】: