回答編集履歴
2
追記
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
追記
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
|
```
|