2

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

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

我想将此列表中的所有元素平方。我试过了:

[m*m for m in l]

但这不起作用并抛出:

TypeError:不能将序列乘以“列表”类型的非整数

因为我猜是嵌套列表?

我该如何解决?

4

4 回答 4

9
>>> 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]]
于 2010-12-06T20:30:57.193 回答
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
于 2010-12-06T20:31:49.653 回答
1

假设您希望答案如下所示:

[[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

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

于 2010-12-06T20:34:59.973 回答
0

您需要的是一个递归函数,如下所示:

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

我宁愿不讨论type(el) == list这里的正确性,但你明白了要点。

当然,这也可以通过列表理解来实现,因为许多人都有指针,只要结构始终相同。此递归函数可以处理任何级别的递归,以及包含列表和数字的列表。

于 2010-12-06T20:31:54.857 回答