ネストされたリストの理解を深める
2023-11-11 05:51:12
質問
リスト内包のネストを理解したいです。
以下に、リスト内包の式と、それに相当するforループを列挙します。
私の理解はこれらについて正しいのでしょうか。
例えば
[(min([row[i] for row in rows]),max([row[i] for row in rows]))
for i in range(len(rows[0]))]
は
result=[]
for i in range(len(rows[0])):
innerResult=[]
for row in rows:
innerResult.append(row[i])
innerResult2=[]
for row in rows:
innerResult2.append(row[i])
tuple=(min(innerResult), max(innerResult2))
result.append(tuple)
一般論として言わせてもらえば
[exp2([exp1 for x in xSet]) for y in ySet]
のフォームは、次のように訳すことができます。(これで合っているといいのですが)
result=[]
for y in ySet:
innerResult =[]
for x in xSet:
innerResult.append(exp1)
exp2Result = exp2(innerResult)
result.append(exp2Result)
もっと単純な場合
[exp1 for x in xSet for y in ySet]
は
result=[]
for x in xSet:
for y in ySet:
result.append(exp1)
のところです。
[[exp1 for x in xSet] for y in ySet]
は
result=[]
for y in ySet:
innerResult=[]
for x in xSet:
innerResult.append(exp1)
result.append(innerResult)
私は同様の質問を
複雑なリスト内包のためのループ表現に相当するもの
ここで示された答えは、内部で何を行っているかを理解した上で、フォームを再構築するものです。
他の少し変わった例にも応用できるように、体系的に仕組みを知りたいです。
どのように解決するのですか?
簡単に言うと はい、あなたはあなたの理解で正しいです .
ただ、キャッチがあります: Pythonコードで通常ネストされたリスト内包を使う方法は、多次元配列で操作することです。
典型的な例は、行列を操作するときです。
>>> matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> [[el - 1 for el in row] for row in matrix]
[[0, 1, 2], [3, 4, 5], [6, 7, 8]]
ご覧のように、quot;nesting" は行列の各次元で操作することによって機能します。
提供された例では、どうやら
ySet
のように [残念な名前ですが
セット
はpythonで提供される型の1つです]は単なる一般的なカウンターで、フードの下で何が起こっているかを追うのが少し難しくなっています。
あなたの最初の例に関しては
>>> rows = ([1, 2, 3], [10, 20, 30])
>>> [(min([row[i] for row in rows]),max([row[i] for row in rows])) for i in range(len(rows[0]))]
[(1, 10), (2, 20), (3, 30)]
を調べるとよいでしょう。 zip を調べてみるのもいいかもしれません。
>>> zip(rows[0], rows[1])
[(1, 10), (2, 20), (3, 30)]
または、最大限の簡潔さとエレガンスのために
>>> zip(*rows)
[(1, 10), (2, 20), (3, 30)]
HTH!
関連
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 前月の日時オブジェクトを返す
-
[解決済み] Django のテストデータベースをメモリ上だけで動作させるには?
-
[解決済み] Djangoで2つの日付の間を選択する
-
[解決済み] バブルソートの宿題
-
[解決済み] 範囲指定された浮動小数点数のランダムな配列を生成します。
-
[解決済み] pandasのタイムゾーンに対応したDateTimeIndexを、特定のタイムゾーンに対応したナイーブなタイムスタンプに変換する。
-
[解決済み] djangoフレームワークでフォームフィールドから値を取得するには?
-
[解決済み] pycharmがタブをスペースに自動変換する
-
[解決済み] Pythonの検索パスを他のソースに展開する
-
[解決済み] Pythonでファイルの読み込みと上書きをする