3

n 個のアイテムが新しいリストに追加されたときにリストの理解を停止させることはできますか?

例えば、

[x for x in xrange(20) if len(<this>) < 10 ]

確認するには: 結果のリストの長さを 10 に制限したい。 "" は、作成中の現在のリストの擬似コードです。私はpython 2.7を使用しています

4

3 に答える 3

12

いいえ。ただしitertools.islice()、指定された数のアイテムのみを生成するジェネレーターを提供できます。

>>> list(itertools.islice('foobar', 3))
['f', 'o', 'o']
于 2012-10-04T20:22:04.987 に答える
2

これは可能ですが、リスト内包表記の実装に依存するため、使用している Python の実装に依存します。CPython での「このリスト内包表記」の名前は「_[1]」なので、たとえば次のようにできます (自分で試してみてください。実際に機能します)。

[i for i in xrange(20) if len(locals().get("_[1]")) < 10]

実際の製品コードでこれを行うことはほとんどありません。ばかげてあいまいで、誰かが他の実装を使用している場合、壊れる可能性があります。代わりに、ループを使用してください。

l = []
for i in xrange(20):
    l.append(i)
    if len(l) >= 10:
         break

locals().get("_[1]")Python は、リスト内包表記の構築中に現在のリストをどこかに保存する必要があるため、機能します。" _[1]" は、誰かが変数名として使用する可能性が非常に低いため、いくぶん恣意的に選択されました。入れ子になったリスト内包表記を作成した場合、それらは " _[2]" や " _[3]" など、より高いインクリメント変数名でリストを格納します。

于 2012-10-04T20:33:48.497 に答える
1

xrangeジェネレーターを使用している場合は、実行してください

list(xrange(20))[:10]
于 2012-10-04T20:27:29.517 に答える