get()
は、サイズ1のlist
にそれが呼び出されるたびに返すジェネレータですので、あなたがi[0]
を使用する必要がされている理由があります。コードi[0] for i in get()
はi[0] for i in ([0],[0],[0])
と同じです。あなたのコードが動作する理由は、i[0]
が返された要素の最初の要素を取得します。それ自体はlist [0]
です。
私があなたの質問から集めたのは、あなたがi for i in [0,0,0]
を持ちたいということです。他の答えで述べたように、これはlist
[0]
の代わりにint
0
になるようにジェネレータを変更することで実現できます。次のコード例では、発電機の結果を見ることができます:
>>> for i in get():
... print("i={} and i[0]={}".format(i, i[0]))
...
i=[0] and i[0]=0
i=[0] and i[0]=0
i=[0] and i[0]=0
あなたが見ることができるように、あなたの発電機がすべての反復[0]
を返し、それはあなたがそれぞれの最初の要素を取得するためにi[0]
を使用する必要が理由ですリスト。 r
は、発電機の結果だけであるので、
また、あなただけの次のようにして簡略化することができます(GETで私は[0] iに対する())
>>> def gen():
... for i in range(3):
... yield 0
...
>>> r = list(gen())
>>> r
[0, 0, 0]
またはさらに短い:それは、機能flatten(concat)のための標準的な使用を思わ[0] * 3'。 –
@ Space_C0wb0yいいえ、コードが短くはありませんが、ジェネレータではなくリストが作成されます。 3の大きな値の場合、ソリューションは不必要なメモリを大量に割り当てます。 – phihag
@philhag私は "3の大きな値"という考え方が好きです:これは数学を面白くすることができます:-) – neil