修改嵌套列表

时间:2010-12-06 20:28:17

标签: python nested-lists

如何处理Python中的嵌套列表?我在弄清楚语法时遇到了问题。例如:

>>> l = [[1, 2, 3], [5, 6, 7]]

我想对这个列表中的所有元素进行平方。我试过了:

[m*m for m in l]

但这不起作用并引发:

  

TypeError:无法乘以序列   非'int类型'list'

因为嵌套列表我猜?

我该如何解决这个问题?

4 个答案:

答案 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

显然,列表理解答案更好。