61922


このようにfor loopを1文で書けると思います。

[code]

    l = [i for i in range(5)] # 結果　[0, 1, 2, 3, 4]
    
[/code]

あとは、このようにもできると思います。

[code]

    x = '\n'.join(" "*i + "I" for i in range(n))
    print(x)
    #　結果
    # I
    #  I
    #   I
    #    I
    
[/code]

一番最初のものでlistではなくて、printを連続で行うような処理をしようとしたのですが、プリントできません。

[code]

    print(i for i in range(5))
    # 結果　<generator object <genexpr> at 0x000002A167A4C048>
    
[/code]

なぜ、joinはうまくできているのにprintはできないのでしょうか？


CC BY-SA 4.0
2020-01-01T03:06:30.847
61921
2020-01-01T05:06:10.867
2020-01-01T04:31:48.150
3060
36091
question
python
一文で書くfor loopとジェネレーターについて


print() の場合は以下のようにします。

[code]

    print(*(i for i in range(5)))                                           
    0 1 2 3 4
    
[/code]

print() は渡されたオブジェクトをそのまま表示するのがその機能なので値を表示したければ値を渡さなければなりません。

[code]

    print(i for i in range(5))
    
[/code]

だと `(i for i in range(5))` というジェネレータが渡されたことを意味します。  
アスタリスクを付けて `*(i for i in range(5))` とすると、ジェネレータをアンパックします(評価した値を渡します)。


CC BY-SA 4.0
2020-01-01T04:37:39.583
61922
2020-01-01T05:06:10.867
2020-01-01T05:06:10.867
13227
13227
61921
answer