73385


下記のブログでリストとイテレータについて書かれているのですが、理解表現があります。

[Pythonのリストはイテレーターでない。わかりやすい（はずの）イテレーターとイテラブルの説明](https://blog.hirokiky.org/entry/2020/02/03/181938)

なぜリスト自身がイテレータの場合一度ループしただけでリストはループ出来なくなってしまうのでしょうか？  
この場合のループとは `for in` を指しているのでしょうか？その場合なぜループできなくなるのか分からないです。ブログでは `for in`
の内部ではイテレータによる処理が行われているという説明までされています。

> もしリスト自身がイテレーターであれば、1度ループしただけでリストはループできなくなってしまいます（ループの進行状況が管理されるので）。
> そのために、リスト自身ではなくリストイテレーターさん（つまりイテレーター）にループの状況を管理してもらっています。Pythonってすごい！

### 追記

どうやら `for in` にイテレータは渡せるみたいです。

ループでは使用できないという表現がよく分からないです。

> イテレーターは同時にイテラブルでもあります。 なので、イテレーターは for in ... に渡せます。この場合、イテレーターは
> iter(my_iterator) をすると my_iterator 自身を返します。


CC BY-SA 4.0
2021-01-18T07:17:46.573
73381
2021-01-18T09:33:58.947
2021-01-18T09:33:58.947
22565
22565
question
python python3 array
pythonリストとイテレータについて


プログのリンクが不明で, たぶん[ここかな](https://blog.hirokiky.org/entry/2020/02/03/181938)？と

言ってることは, (イテレーターだと) 使い切ってしまうと それ以上は使えない … ですね。  
リストの場合

[code]

    lst = [10,20,30]
    for i in lst:
      print(i)
    # 10
    # 20
    # 30
    
    for i in lst:
      print(i)
    # 10
    # 20
    # 30
    
[/code]

ジェネレーターの場合

[code]

    def gen1():
      for n in [10,11,12]:
        yield n
    
    g1 = gen1()
    for i in g1:
      print(f'1度目 {i}')
    # 10
    # 11
    # 12
    
    for i in g1:
      print(f'2度目 {i}')
    # 出力なし
    
[/code]

ファイルの場合 (試してないけど)

[code]

    with open('dummydata') as fp:
      for ln in fp:
        print(ln)
      for ln in fp:
        print(ln)
    
[/code]


CC BY-SA 4.0
2021-01-18T08:44:37.330
73385
2021-01-18T08:44:37.330
43025
73381
answer