[解決済み] Pythonのリストイテレータの動作とnext(iterator)
2022-03-01 18:15:50
質問
考えてみてください。
>>> lst = iter([1,2,3])
>>> next(lst)
1
>>> next(lst)
2
ですから、イテレータを進めることは、予想通り、その同じオブジェクトをミューティングすることで処理されます。
ということであれば、期待できます。
a = iter(list(range(10)))
for i in a:
print(i)
next(a)
を呼び出すと、2つ目の要素ごとにスキップされます。
next
はイテレータを一度進め、ループによる暗黙の呼び出しで二度目を進める必要があります。
i
.
そうではありません。ループは次のように表示します。 すべて をスキップすることなく、リスト内の項目を表示します。
最初に考えたのは、ループが
iter
を渡すと、独立したイテレータが生成されるかもしれません。
iter(a) is a
.
では、なぜ
next
は、この場合イテレータを前進させないように見えるのでしょうか?
解決方法は?
あなたが見ているのは
インタプリタ
の戻り値をエコーバックしています。
next()
に加えて
i
が繰り返し表示されます。
>>> a = iter(list(range(10)))
>>> for i in a:
... print(i)
... next(a)
...
0
1
2
3
4
5
6
7
8
9
だから
0
の出力です。
print(i)
,
1
からの戻り値
next()
対話型インタープリタによってエコーされる、など。ちょうど5回の反復があり、各反復で2行がターミナルに書き込まれることになります。
の出力を
next()
は期待通りに動作します。
>>> a = iter(list(range(10)))
>>> for i in a:
... print(i)
... _ = next(a)
...
0
2
4
6
8
または印刷
エクストラ
を区別するための情報を提供します。
print()
の出力をインタラクティブなインタプリタのエコーと区別する。
>>> a = iter(list(range(10)))
>>> for i in a:
... print('Printing: {}'.format(i))
... next(a)
...
Printing: 0
1
Printing: 2
3
Printing: 4
5
Printing: 6
7
Printing: 8
9
言い換えると
next()
は期待通りに動作していますが、インタラクティブ・インタープリタによってエコーされたイテレータから次の値を返しているため、ループは何らかの形で自身のイテレータコピーを持っていると思わせてしまいます。
関連
-
pyCaret効率化乗算器 オープンソース ローコード Python機械学習ツール
-
[解決済み] リストのリストからフラットなリストを作るには?
-
[解決済み] リスト内のアイテムのインデックスを検索する
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] リストが空かどうかを確認するにはどうすればよいですか?
-
[解決済み] Pythonのリストメソッドであるappendとextendの違いは何ですか?
-
[解決済み] 割り当て後にリストが予期せず変更されました。その理由と防止策を教えてください。
-
[解決済み] リストの最後の要素を取得する方法
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】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を使ったオフィス自動化コード例
-
python call matlab メソッドの詳細
-
PicgoのイメージベッドツールをPythonで実装する
-
pythonサイクルタスクスケジューリングツール スケジュール詳解
-
Pythonの学習とデータマイニングのために知っておくべきターミナルコマンドのトップ10
-
[解決済み】DataFrameのコンストラクタが正しく呼び出されない!エラー
-
[解決済み】numpyの配列連結。"ValueError:すべての入力配列は同じ次元数でなければならない"
-
[解決済み】Django: ImproperlyConfigured: SECRET_KEY 設定は空であってはならない
-
[解決済み】cアンダースコア式`c_`は、具体的に何をするのですか?
-
[解決済み】リスト内の2つの要素ごとに繰り返し処理を行う【重複あり