2010-12-06 13 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のために+1: – khachik

+0

ありがとう!時には幸運なこともあります。 – user225312

+0

+1とascii artの場合) – Ant

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

私はどこでもラムダを避けています!しかし+1。 – user225312

0

は再帰関数、次のようなものです:

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

私はむしろここtype(el) == listの正しさに入れないと思いますが、あなたはその要旨を取得します。

もちろん、これはリスト内包でも可能です。多くの人がポインタを持っているので、は、構造が常に同じです。この再帰関数は、任意のレベルの再帰を処理でき、リストと数値の両方を含むリストです。

+0

再帰はさまざまな深さの樹木にとって非常に貴重ですが、ここでは必然的に必要ありません。 – delnan

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 

もちろん、リスト内包の答えは優れています。

関連する問題