2016-08-04 7 views
0
a = 2 
b = 3 
c = 4 
x = y = z = [0 for i in xrange(a*b*c)] 

で複数のリストを初期化します(私は、各リストの初期化のために、bとcを掛けたくないので)、 0の別々のリストとして。上記の場合、xが更新されると、yとzも同じ変更で同時に更新されます。 [0 for i in xrange(a*b*c)][0] * a*b*c単純に等価であることををy、zは1行</strong>で<strong>初期化することができ、xはする方法はありますのpython

x, y, z = [[0 for i in xrange(a*b*c)] for _ in xrange(3)] 

注:

答えて

3

ちょうど別の理解を使用して、それを解凍します。

+0

リストが実際にビルドされないようにジェネレータを使用するのはどうですか? 'a、b、c =(xrange(i * b * c)in _ xrange(3))' – Netwave

+0

@DanielSanchez - これは確かに可能です。しかし、パフォーマンス上の利点を見るには、1行に複数の独立変数に展開するよりも多くのリストを作成する必要があります。いずれにしても、参照を格納するだけで済みます。 – TigerhawkT3

+0

もう少し説明してください。別のリストが含まれているリストを作成していますが、そのリストを使用することはありません。ジェネレータを使うことで、そのリストを取り除くだけです。私は間違っているか何かを逃していますありがとう!! – Netwave

0

あなたの規定の意図ではなく、「1行」の要件を見てみると:

a = 2 
b = 3 
c = 4 
x = [0 for i in xrange(a*b*c)] 
y = x [:] 
z = x [:] 

わからないオプティマイザはで繰り返し乗算を回避するのに十分賢いです:

x, y, z = [[0 for i in xrange(a*b*c)] for _ in xrange(3)] 

、Bを仮定、およびcはプロパティであるため、それらを読み取ると副作用が発生します。オプティマイザは、動的に型指定された言語でこれをどのように知ることができますか?

関連する問題