Pythonでネストされたリストを処理する方法は?構文を理解するのに問題があります。例のように:
>>> l = [[1, 2, 3], [5, 6, 7]]
このリストのすべての要素を二乗したいと思います。私は試した:
[m*m for m in l]
しかし、それは機能せず、スローします:
TypeError:シーケンスをタイプ'list'の非intで乗算することはできません
ネストされたリストのためだと思いますか?
これを修正するにはどうすればよいですか?
Pythonでネストされたリストを処理する方法は?構文を理解するのに問題があります。例のように:
>>> l = [[1, 2, 3], [5, 6, 7]]
このリストのすべての要素を二乗したいと思います。私は試した:
[m*m for m in l]
しかし、それは機能せず、スローします:
TypeError:シーケンスをタイプ'list'の非intで乗算することはできません
ネストされたリストのためだと思いますか?
これを修正するにはどうすればよいですか?
>>> 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
答えを次のようにしたいとします。
[[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
明らかに、リスト内包の答えはより良いです。
必要なのは、次のような再帰関数です。
def square(el):
if type(el) == list:
return [square(x) for x in el]
else:
return el**2;
ここの正しさにはtype(el) == list
触れたくないのですが、要点はわかります。
もちろん、構造が常に同じであれば、多くの人がポインタを持っているので、これはリスト内包表記でも実行できます。この再帰関数は、任意のレベルの再帰、およびリストと数値の両方を含むリストを処理できます。