2010-12-06 89 views
1

如何在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'

因为嵌套列表我猜的?

我该如何解决这个问题?

回答

7
>>> 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]] 
+0

+1为第一:) – khachik 2010-12-06 20:34:13

+0

谢谢!有时候会有幸运的。 – user225312 2010-12-06 20:36:40

+0

对于list-comp和ascii艺术+1;) – Ant 2010-12-06 20:45:48

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 
0

你需要的是一个递归函数,是这样的:

def square(el): 
    if type(el) == list: 
     return [square(x) for x in el] 
    else: 
     return el**2; 

我宁可不进入的type(el) == list正确性这里,但你得到的要点。

当然,这也是可以用列表理解的,因为很多人都指出,前提是的结构总是一样的。这个递归函数可以处理任何级别的递归,以及包含列表和数字的列表。

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 

显然,列表解析答案是更好的。