質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

2103閲覧

イテレーターの使い方について

yu__

総合スコア108

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/03/05 07:20

イテレーターの使い方について

python

1i = iter([1,2,3,4,5]) 2i.next()

なるコードを実行して1という結果を期待したのですが、
以下のような結果を得てしまいました。

--------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-43-820c831aff02> in <module> 1 i = iter([1,2,3,4,5]) ----> 2 i.next() AttributeError: 'list_iterator' object has no attribute 'next'

https://uxmilk.jp/39295
上記のサイトのコードをコピペしただけにも関わらずエラーが出る理由が分かりません。
詳しい方がいれば教えていただけると恐縮です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

そのページはpython2に準拠しています。python3ではnextメソッドは__next__というアンダーバー付きの名前(特殊メソッドと言います)に変わっており、直接呼ぶのではなく組み込み関数next()が内部的に呼び出してくれることになっています(python2でも本当はこちらを使うはずなのですが、iterator.next()も受け入れられていたので統一のためにnextが特殊メソッドに変更された・・・という経緯だったはずです)。

python

1next(i)

で同じ結果になるでしょう。

投稿2019/03/05 07:34

編集2019/03/05 07:38
hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yu__

2019/03/05 12:56

特殊メソッドという言葉自体初めて聞きました。勉強不足で申し訳ありません。 ベストアンサーにさせていただきました。
guest

0

こんにちは。
Python3では__next__()をご使用下さい。

Python

1i = iter([1,2,3,4,5]) 2i.__next__()

参考サイトはPython2なのだと思います(そう書いてくれると親切ですね)。

投稿2019/03/05 07:32

編集2019/03/05 07:34
firedfly

総合スコア1131

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hayataka2049

2019/03/05 07:34

特殊メソッドは直接呼び出すものではありません
firedfly

2019/03/05 07:35

next(i) を使う、ということですね。
firedfly

2019/03/05 07:41

そういえば super().__init__() は呼びますよね……。
tachikoma

2019/03/05 07:41

print文にもPython2の名残が見られますね。2016年の記事でPython2のコードを出してくるとは・・・。
hayataka2049

2019/03/05 07:50 編集

だって呼ぶしかないじゃないですか>super().__init__() イイワケを考えると、これを書くのはそもそも__init__の中なので、特殊メソッドを書くために他の特殊メソッド(この場合は親の__init__)を呼んでいると考えればそんなに気にならないです。ただ、外から使う場合は通常はやはり叩かないと思います。
firedfly

2019/03/05 07:52 編集

追記ありがとうございます! 「外から呼ばれることを想定していないメソッド」に __ を付けるのであり 継承時に __init__ から呼ぶのは「中から呼んでいる」ってことですね。 すっきりしました。
firedfly

2019/03/05 07:53

@tachikoma さん コピペプログラマーが量産した記事ってことですかね……。
guest

0

参考にされているページの記載はPython2のものです。
Python3では __next__() に変わっています。

投稿2019/03/05 07:35

mather

総合スコア6753

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問