Pythonに、偶数の値を出力するように機能する組み込み関数があるかどうか、たとえばrange()のように誰かが知っていますか?.
ありがとう
range(0, 10, 2)
と書くことができます。
ステップ2を使用するだけです。
range(start, end, step)
試してください:
range( 0, 10, 2 )
これがあなたの聞きたいことかどうかはわかりませんが、リスト内包表記を使用して奇数の値を除外するのはかなり簡単です。
evens = [x for x in range(100) if x%2 == 0]
または
evens = [x for x in range(100) if x&1 == 0]
range
のオプションのステップサイズパラメーターを使用して、2ずつカウントアップすることもできます。
>>> if 100 % 2 == 0 : print "even"
...
even
偶数の遅延のある無限イテレータを作成する方法もいくつかあります。
itertools
モジュールと _more_itertools
_ を使用します1 range()
をエミュレートするイテレータを作成します。
_import itertools as it
import more_itertools as mit
# Infinite iterators
a = it.count(0, 2)
b = mit.tabulate(lambda x: 2 * x, 0)
c = mit.iterate(lambda x: x + 2, 0)
_
後者のオプションはすべて、無限のシーケンス_0, 2, 4, 6, ...
_を生成できます。
これらをループすることで任意のジェネレーターのように扱うことができます。または、シーケンスからn
番号を _itertools.islice
_ または-からtake
を使用して選択できます。 itertoolsレシピ 例:
_mit.take(10, a)
# [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
_
これはlist(range(0, 20, 2))
と同等です。ただし、range()
とは異なり、イテレータは一時停止され、再度実行すると偶数の次のバッチが生成されます。
_mit.take(10, a)
# [20, 22, 24, 26, 28, 30, 32, 34, 36, 38]
_
詳細
提示されたオプションはすべて、start
を整数で表す無限反復子、つまり_0
_です。
itertools.count
_は、_step=2
_によって増分される次の値を生成します( 同等のコード を参照)。more_itertools.tabulate
_は itertoolsレシピ であり、関数を数値行の各値にマップします( ソースコード を参照)。more_itertools.iterate
_ は開始値(_0
_)を生成します。次に、最後の項目に関数を適用し(2ずつ増加)、その結果を生成し、このプロセスを繰り返します( ソースコード を参照)。1take
やtabulate
などの itertoolsレシピ を含む多くの便利なツールを実装するサードパーティパッケージ。