teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

追記

2018/09/05 03:54

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -1,4 +1,4 @@
1
- ジェネレータは一度巡回すると消費されます。
1
+ ジェネレータ (より一般的にイテレータ) は一度巡回すると消費されます。
2
2
  ```Python
3
3
  >>> a = [1, 2, 3, 4, 5]
4
4
  >>> b = [5, 4, 3, 2, 1]
@@ -29,6 +29,11 @@
29
29
  上記記述自体は誤りではないですが、ジェネレータ というより イテレータ 一般の仕様です。
30
30
  本来は ジェネレータとイテレータ ではなく、イテレータとイテラブル を対比すべきところでした。
31
31
 
32
+ > **iterator**
33
+ データの流れを表現するオブジェクトです。イテレータの `__next__()` メソッドを繰り返し呼び出す (または組み込み関数 next() に渡す) と、流れの中の要素を一つずつ返します。データがなくなると、代わりに StopIteration 例外を送出します。その時点で、イテレータオブジェクトは尽きており、それ以降は `__next__()` を何度呼んでも StopIteration を送出します。...中略... (list のような) コンテナオブジェクトは、自身を iter() 関数にオブジェクトに渡したり for ループ内で使うたびに、新たな未使用のイテレータを生成します。これをイテレータで行おうとすると、前回のイテレーションで使用済みの同じイテレータオブジェクトを単純に返すため、空のコンテナのようになってしまします。
34
+
35
+ **引用元:** [Pythonドキュメント » 用語集](https://docs.python.jp/3/glossary.html#term-iterator)
36
+
32
37
  私自身、回答にあたって若干混乱したようです。失礼しました。
33
38
  ```Python
34
39
  >>> # これは イテラブル

1

追記

2018/09/05 03:54

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -20,4 +20,30 @@
20
20
  [(1, 5), (2, 4), (3, 3), (4, 2), (5, 1)]
21
21
  >>> lst
22
22
  [(1, 5), (2, 4), (3, 3), (4, 2), (5, 1)]
23
+ ```
24
+
25
+ 追記
26
+ ---
27
+ > ジェネレータは一度巡回すると消費されます。
28
+
29
+ 上記記述自体は誤りではないですが、ジェネレータ というより イテレータ 一般の仕様です。
30
+ 本来は ジェネレータとイテレータ ではなく、イテレータとイテラブル を対比すべきところでした。
31
+
32
+ 私自身、回答にあたって若干混乱したようです。失礼しました。
33
+ ```Python
34
+ >>> # これは イテラブル
35
+ ... lst = [1, 2, 3, 4, 5]
36
+ >>>
37
+ >>> list(lst)
38
+ [1, 2, 3, 4, 5]
39
+ >>> list(lst)
40
+ [1, 2, 3, 4, 5]
41
+ >>>
42
+ >>> # これは イテレータ
43
+ ... it = iter(lst)
44
+ >>>
45
+ >>> list(it)
46
+ [1, 2, 3, 4, 5]
47
+ >>> list(it)
48
+ []
23
49
  ```