[解決済み] 1行の入れ子型Forループ
質問
Pythonで行列の転置を行う関数を書きました。
def transpose(m):
height = len(m)
width = len(m[0])
return [ [ m[i][j] for i in range(0, height) ] for j in range(0, width) ]
この過程で、一行でネストされたforループがどのように実行されるかを完全に理解していないことに気づきました。以下の質問に答えることで、私が理解するのを助けてください。
- この for ループが実行される順序は何ですか。
- 3重にネストされたforループがあった場合、どのような順序で実行されるでしょうか?
- 等しい非ネスト化されたforループは何になるのでしょうか?
与えられた。
[ function(i,j) for i,j in object ]
- このfor loop構造を使用するために、objectはどのような型でなければなりませんか?
- objectの要素に割り当てられるiとjの順序は?
- 別のforループ構造でシミュレートできますか?
- この for ループは、類似または異なる構造の for ループとネストできますか? また、それはどのように見えるでしょうか?
追加情報もお願いします。
どのように解決するのですか?
情報源として最適なのは リスト内包に関する公式の Python チュートリアル . リスト内包は for ループとほぼ同じですが(確かにどんなリスト内包も for ループとして書くことができます)、for ループを使うより速いことがよくあります。
チュートリアルにあるこの長いリスト内包を見てください (
if
の部分は内包をフィルタリングし、if 文を通過した部分のみがリスト内包の最後の部分に渡されます (ここでは
(x,y)
):
>>> [(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]
このネストされたforループと全く同じです(チュートリアルが言うように、forとifの順序が同じであることに注意してください)。
>>> combs = []
>>> for x in [1,2,3]:
... for y in [3,1,4]:
... if x != y:
... combs.append((x, y))
...
>>> combs
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]
主要な 違い リスト内包とforループの大きな違いは、forループの最後の部分(何かをする部分)が最後ではなく、最初に来るということです。
ご質問にお答えします。
このfor loop構造を使用するためには、オブジェクトはどのような型でなければならないのでしょうか?
ある イテラブル . 要素の(有限の)セットを生成できるあらゆるオブジェクト。これには、任意のコンテナ、リスト、セット、ジェネレータなどが含まれます。
iとjがオブジェクトの要素に割り当てられる順序は何ですか?
各リストから生成されるのと全く同じ順序で、あたかもネストされたforループの中にいるように割り当てられます(最初の理解では、iに1要素、次にjからすべての値、iに2要素、次にjからすべての値、などです)。
別のforループ構造でシミュレートできるのでしょうか?
はい、上記ですでに示されています。
<ブロッククオートこのforループは、類似または異なる構造のforループとネストすることができますか?また、それはどのように見えるでしょうか?
もちろんですが、あまりいいアイデアではありません。ここでは、例えば、文字のリストのリストを与えています。
[[ch for ch in word] for word in ("apple", "banana", "pear", "the", "hello")]
関連
-
[解決済み] for'ループでインデックスにアクセスする?
-
[解決済み] 複数の例外を1行でキャッチする(ブロックを除く)
-
[解決済み] ループ内のJavaScriptクロージャ - シンプルな実用例
-
[解決済み] 配列の反復処理に "for...in "を使用するのは、なぜ良くないのでしょうか?
-
[解決済み] Javaでネストされたループから抜け出すには?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】forループを使った辞書の反復処理
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
-
[解決済み] googletransがエラー 'NoneType' オブジェクトに 'group' 属性がない、と言って動かなくなった。
-
[解決済み] Pythonの文字列書式をリストで使う
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Pythonのマルチプロセッシングプールimap_unorderedの呼び出しの進捗を表示しますか?
-
[解決済み] django.db.migrations.exceptions.InconsistentMigrationHistory
-
[解決済み] 辞書のキーと値を交換するにはどうすればよいですか?
-
[解決済み] タプルのリストを複数のリストに変換するには?
-
[解決済み] PyMongoで.sortを使用する
-
[解決済み] PyQtアプリケーションのスレッド化。QtスレッドとPythonスレッドのどちらを使うか?
-
[解決済み] Flask でグローバル変数はスレッドセーフか?リクエスト間でデータを共有するには?
-
[解決済み] 単純な文字列からtimedeltaオブジェクトを作成する方法
-
[解決済み] Pythonの辞書にあるスレッドセーフについて
-
[解決済み] 認証プラグイン 'caching_sha2_password' はサポートされていません。