回答編集履歴

2

追記

2018/09/05 03:54

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -1,4 +1,4 @@
1
- ジェネレータは一度巡回すると消費されます。
1
+ ジェネレータ (より一般的にイテレータ) は一度巡回すると消費されます。
2
2
 
3
3
  ```Python
4
4
 
@@ -60,6 +60,16 @@
60
60
 
61
61
 
62
62
 
63
+ > **iterator**
64
+
65
+ データの流れを表現するオブジェクトです。イテレータの `__next__()` メソッドを繰り返し呼び出す (または組み込み関数 next() に渡す) と、流れの中の要素を一つずつ返します。データがなくなると、代わりに StopIteration 例外を送出します。その時点で、イテレータオブジェクトは尽きており、それ以降は `__next__()` を何度呼んでも StopIteration を送出します。...中略... (list のような) コンテナオブジェクトは、自身を iter() 関数にオブジェクトに渡したり for ループ内で使うたびに、新たな未使用のイテレータを生成します。これをイテレータで行おうとすると、前回のイテレーションで使用済みの同じイテレータオブジェクトを単純に返すため、空のコンテナのようになってしまします。
66
+
67
+
68
+
69
+ **引用元:** [Pythonドキュメント » 用語集](https://docs.python.jp/3/glossary.html#term-iterator)
70
+
71
+
72
+
63
73
  私自身、回答にあたって若干混乱したようです。失礼しました。
64
74
 
65
75
  ```Python

1

追記

2018/09/05 03:54

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -43,3 +43,55 @@
43
43
  [(1, 5), (2, 4), (3, 3), (4, 2), (5, 1)]
44
44
 
45
45
  ```
46
+
47
+
48
+
49
+ 追記
50
+
51
+ ---
52
+
53
+ > ジェネレータは一度巡回すると消費されます。
54
+
55
+
56
+
57
+ 上記記述自体は誤りではないですが、ジェネレータ というより イテレータ 一般の仕様です。
58
+
59
+ 本来は ジェネレータとイテレータ ではなく、イテレータとイテラブル を対比すべきところでした。
60
+
61
+
62
+
63
+ 私自身、回答にあたって若干混乱したようです。失礼しました。
64
+
65
+ ```Python
66
+
67
+ >>> # これは イテラブル
68
+
69
+ ... lst = [1, 2, 3, 4, 5]
70
+
71
+ >>>
72
+
73
+ >>> list(lst)
74
+
75
+ [1, 2, 3, 4, 5]
76
+
77
+ >>> list(lst)
78
+
79
+ [1, 2, 3, 4, 5]
80
+
81
+ >>>
82
+
83
+ >>> # これは イテレータ
84
+
85
+ ... it = iter(lst)
86
+
87
+ >>>
88
+
89
+ >>> list(it)
90
+
91
+ [1, 2, 3, 4, 5]
92
+
93
+ >>> list(it)
94
+
95
+ []
96
+
97
+ ```