2016-04-06 11 views

答えて

1

これは、フォームのかなりバニラリスト内包である:この場合

[expression for var in iterable] 

expressionはちょうど別のリスト内包であることを起こります。したがって、内側の理解度は外側のiterableによって得られた各項目について1回評価されます。

我々はアウト機能にインナー理解を破った場合には、もう少し明確に感じるかもしれない:(うまくいけば、とにかく)

def inner(i): 
    return [i * j for j in range(3, 5)] 

l = [inner(i) for i in range(3)] 

は、今、私たちはよりはっきりと見る外側の理解がために一度実行するために、内側理解を引き起こすことそれぞれ「i」がrange(3)にあります。

0

は、それが外部から実行されている想像この場合

[X for i in range(3)] 

を、Xは別のリスト内包自体である:。

[i*j for j in range(3,5)] 

iを単一の値にバインドされ、その中。

だから、次のように[[0*3,0*4],[1*3,1*4],[2*3,2*4]]、または[[0,0],[3,4],[6,8]]

0

に展開されます:

l = [[i * j for j in range(3, 5)] for i in range(3)] 

iは、値0にとり1、および2iの各値について、ネストされたリストの内包が評価され、その結果が、トップレベルのリストに保存された:ここで

[i * j for j in range(3, 5)] 

は、jは値34になります。各値について、現在値がijの積が保存されます。 iの最初の値、すなわち0については

、これは0j値であるので、あなたは[0, 0]を取得します。 iの第二の値、すなわち1については

、これは1j値であるので、あなたは[3, 4]を取得します。 iの3番目の値、すなわち2については

、これは2j値であるので、あなたは[6, 8]を取得します。

最終的な結果は、あなたが得るので、これら三つのサブリストで構成されるリストである:

[[0, 0], [3, 4], [6, 8]] 
0
l = [[i * j for j in range(3, 5)] for i in range(3)] 

が想像することができますように。

(1) l = [[i * j for j in range(3, 5)] with i = 0] => [[0*3, 0*4]]= [[0,0]] 
+(2) l = [[i * j for j in range(3, 5)] with i = 1] =>[[0,0], [3,4]] 
+(3) l = [[i * j for j in range(3, 5)] with i = 2] =>[[0,0], [3,4], [6,8]] 
関連する問題