如何在Python中处理嵌套列表?我有问题搞清楚语法。例如:修改嵌套列表
>>> l = [[1, 2, 3], [5, 6, 7]]
我想将此列表中的所有元素放在一起。我想:
[m*m for m in l]
但是,这并不工作,并抛出了:
TypeError: can't multiply sequence by non-int of type 'list'
因为嵌套列表我猜的?
我该如何解决这个问题?
如何在Python中处理嵌套列表?我有问题搞清楚语法。例如:修改嵌套列表
>>> l = [[1, 2, 3], [5, 6, 7]]
我想将此列表中的所有元素放在一起。我想:
[m*m for m in l]
但是,这并不工作,并抛出了:
TypeError: can't multiply sequence by non-int of type 'list'
因为嵌套列表我猜的?
我该如何解决这个问题?
>>> 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
你需要的是一个递归函数,是这样的:
def square(el):
if type(el) == list:
return [square(x) for x in el]
else:
return el**2;
我宁可不进入的type(el) == list
正确性这里,但你得到的要点。
当然,这也是可以用列表理解的,因为很多人都指出,前提是的结构总是一样的。这个递归函数可以处理任何级别的递归,以及包含列表和数字的列表。
假设你想要的答案是这样的:
[[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为第一:) – khachik 2010-12-06 20:34:13
谢谢!有时候会有幸运的。 – user225312 2010-12-06 20:36:40
对于list-comp和ascii艺术+1;) – Ant 2010-12-06 20:45:48