2Dリストを作成していますが、リスト内包表記で初期化したいと思います。私はそれがこのようなことをしたいと思います:
[[x for i in range(3) if j <= 1: x=1 else x=2] for j in range(3)]
したがって、次のようなものが返されるはずです。
[[1,1,1],
[1,1,1],
[2,2,2]]
どうすればこれを行うことができますか?
ご協力いただきありがとうございます。
2Dリストを作成していますが、リスト内包表記で初期化したいと思います。私はそれがこのようなことをしたいと思います:
[[x for i in range(3) if j <= 1: x=1 else x=2] for j in range(3)]
したがって、次のようなものが返されるはずです。
[[1,1,1],
[1,1,1],
[2,2,2]]
どうすればこれを行うことができますか?
ご協力いただきありがとうございます。
次のようなものを探しているように見えます。
[[1 if j <= 1 else 2 for i in range(3)] for j in range(3)]
Pythonの条件式は、CやJavaなどから来ている場合に慣れているものとは少し異なります。
式
x if C else y
は最初にCを評価します(xではありません)。Cが真の場合、xが評価され、その値が返されます。それ以外の場合は、yが評価され、その値が返されます。
同じことを行うための少し短い方法は次のとおりです。
[[1 if j <= 1 else 2]*3 for j in range(3)]
グレッグの応答は正しいですが、目的の結果を生成するためのはるかに単純で高速な式は次のようになります。
[[j] * 3 for j in (1, 1, 2)]
つまり、のみfor
に適用する必要はないことを覚えておいてくださいrange
;-)、リスト乗算が存在する、など;-)。
それを試してみてください
>>> [[(1 if j<1 else 2) for i in range(3)] for j in range(3)]
[[1, 1, 1], [2, 2, 2], [2, 2, 2]]
2回目はj=1なので、j<1は失敗します