a = 2
b = 3
c = 4
x = y = z = [0 for i in xrange(a*b*c)]
0の個別のリストとして、x、y、zを1行で初期化できる方法はありますか(リストの初期化ごとにa、b、およびcを乗算したくないため)。上記で x が更新されると、y と z も同じ変更で同時に更新されます。
a = 2
b = 3
c = 4
x = y = z = [0 for i in xrange(a*b*c)]
0の個別のリストとして、x、y、zを1行で初期化できる方法はありますか(リストの初期化ごとにa、b、およびcを乗算したくないため)。上記で x が更新されると、y と z も同じ変更で同時に更新されます。
別の内包表記を使用して展開するだけです。
x, y, z = [[0 for i in xrange(a*b*c)] for _ in xrange(3)]
[0 for i in xrange(a*b*c)]
は simpler と同等であることに注意してください[0] * a*b*c
。
「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)]
a、b、および c がプロパティであると仮定すると、それらを読み取ると副作用が生じます。オプティマイザーは、動的に型付けされた言語でこれをどのように知ることができますか?