2016-03-31 8 views
0

リストのリストを作成する必要があります(各内部リストには、固定要素nがあります)。今、n=3のために私はこれをやっている:私はリスト内包を試みたときコンパクトでリストのリストを生成するpython

は、何かのように
my_list = [] 
for x in range(min_inner max_inner + 1): 
    for y in range(min_outer, max_outer + 1): 
     for z in range(fixed_param): 
      my_list.append([x, y, z]) 

[[x,y,z] for x in range(1,4), y in range(1,4), z in range (4)]

私は名前のエラーを取得する

NameError: name 'z' is not defined

はですそれを行うリストの理解の方法がありますか? nは任意の数字(ただし必ずしも大丈夫ではありません)であることを考慮してください。

+0

範囲内のxの範囲[x、y](1,4)yの範囲(1,4)zの範囲(4)] ... –

+1

理解度垂直の代わりにコードを水平にするだけです。伝統的なループは自動的に悪くはありません。 – TigerhawkT3

答えて

3

リストの理解の範囲内で範囲オブジェクトをループする必要があります。

from itertools import product  
list(product(range(1,4),range(1,4),range(4))) 

itertools.product()はかなり多くの最適化(メモリ使用量の点で)よりもイテレータオブジェクトを返すこと:あなたが同じ結果を達成するためにitertools.product()を使用することができ、より簡潔な方法として、また

[[x,y,z] for x in range(1,4) for y in range(1,4) for z in range (4)] 

リストを返すリストの理解。また、結果を繰り返し処理したい場合は、結果をリストに変換する必要はありません。それ以外の場合、リストの理解はより速く実行されます。

+2

リスト内の最初の解と同じでなければならない場合は、[(1、4)、範囲(1,4)、範囲(1,4))]リスト –

+0

@AntonProtopopovその場合、リストの理解力が向上します。しかし、タプルをリストに変換するという意味なら、それは良いアプローチです。 – Kasramvd

+0

@Kasramvd @Anton Protopopovからリストへの変換と一緒にiterツールから 'product'を使用することは私の必要に合っています!あなたがた両方に感謝します :) – okkhoy

関連する問題