2

Pythonでネストされたリストを処理する方法は?構文を理解するのに問題があります。例のように:

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

このリストのすべての要素を二乗したいと思います。私は試した:

[m*m for m in l]

しかし、それは機能せず、スローします:

TypeError:シーケンスをタイプ'list'の非intで乗算することはできません

ネストされたリストのためだと思いますか?

これを修正するにはどうすればよいですか?

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 に答える