[解決済み] Pythonのリストで混乱:イテレータなのかイテレータでないのか?
2023-05-21 12:20:21
質問
私が勉強しているのは
Alex MarteliのPython in a Nutshell
を勉強しているのですが、この本によると、オブジェクトに
next()
メソッドを持つオブジェクトは、少なくとも
イテレータ
. と呼ばれるメソッドを暗黙的あるいは明示的に呼び出すことで、ほとんどのイテレータが構築されることも示唆されています。
iter
.
これを本で読んだ後、試してみたい衝動に駆られました。python 2.7.3インタプリタを立ち上げて、こんなことをやってみました。
>>> x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> for number in range(0, 10):
... print x.next()
しかし、結果はこうなった。
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
AttributeError: 'list' object has no attribute 'next'
混乱する中、xオブジェクトの構造を調べるために
dir(x)
を使用していることに気がつきました。
__iter__
関数オブジェクトがあることに気づきました。そこで、そのタイプのインターフェイスをサポートしている限り、イテレータとして使用できることを突き止めました。
そこで、もう一度、今度は少し違った方法で、このようなことを試みると。
>>> _temp_iter = next(x)
こんなエラーが出ました。
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: list object is not an iterator
しかし、リストがイテレータでないわけがありません。なぜなら、リストはこのインタフェースをサポートしているように見えますし、次の文脈では確かにイテレータとして使うことができるからです。
>>> for number in x:
... print x
誰か私の頭の中でこれを明確にするのを助けてくれませんか?
どのように解決するのですか?
それらは
反復可能
であるが、それらは
イテレータ
. これらは
iter()
に渡すことで、暗黙のうちに(例えば
for
を介して)または明示的に、それらのイテレータを取得します。しかし、それ自体はイテレータではありません。
関連
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] 最小限の驚き」と「変更可能なデフォルトの引数
-
[解決済み] pipでPythonの全パッケージをアップグレードする方法
-
[解決済み] Pythonで静的なクラス変数は可能ですか?
-
[解決済み] virtualenvで異なるバージョンのPythonを使用する
-
[解決済み] Pythonが解釈される場合、.pycファイルとは何ですか?
-
[解決済み] mixinとは何か、なぜ有用なのか?
-
[解決済み] Pythonのargparseを使った隠し引数の作成
-
[解決済み] 認証プラグイン 'caching_sha2_password' はサポートされていません。
-
[解決済み] pipの依存性/必要条件をリストアップする方法はありますか?
最新
-
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で2つの日付の間を選択する
-
[解決済み] subprocess.run()の出力を抑制またはキャプチャするには?
-
[解決済み] Python Empty Generator 関数
-
[解決済み] PySparkでデータフレームのカラムをString型からDouble型に変更する方法は?
-
[解決済み] Pythonの文字列書式をリストで使う
-
[解決済み] Pythonの文字列の前にあるbという接頭辞は何を意味するのですか?
-
[解決済み] あるメソッドが複数の引数のうち1つの引数で呼び出されたことを保証する
-
[解決済み] PythonのRequestsモジュールを使ってWebサイトに "ログイン "するには?
-
[解決済み] データクラスとtyping.NamedTupleの主な使用例
-
[解決済み] Python 3.3でrange()がジェネレータなら、なぜnext()をレンジで呼べないのですか?