web-dev-qa-db-ja.com

Pythonの偶数

Pythonに、偶数の値を出力するように機能する組み込み関数があるかどうか、たとえばrange()のように誰かが知っていますか?.

ありがとう

19
chrissygormley

範囲には3つのパラメーターがあります。

range(0, 10, 2)と書くことができます。

60
SLaks

ステップ2を使用するだけです。

range(start, end, step)
9
kgiannakakis

試してください:

range( 0, 10, 2 )
6
ezod

これがあなたの聞きたいことかどうかはわかりませんが、リスト内包表記を使用して奇数の値を除外するのはかなり簡単です。

evens = [x for x in range(100) if x%2 == 0]

または

evens = [x for x in range(100) if x&1 == 0]

rangeのオプションのステップサイズパラメーターを使用して、2ずつカウントアップすることもできます。

6
Sapph
>>> if 100 % 2 == 0 : print "even"
...
even
0
ghostdog74

偶数の遅延のある無限イテレータを作成する方法もいくつかあります。

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_です。

  • a。 _itertools.count_は、_step=2_によって増分される次の値を生成します( 同等のコード を参照)。
  • b。 _more_itertools.tabulate_は itertoolsレシピ であり、関数を数値行の各値にマップします( ソースコード を参照)。
  • c。 _more_itertools.iterate_ は開始値(_0_)を生成します。次に、最後の項目に関数を適用し(2ずつ増加)、その結果を生成し、このプロセスを繰り返します( ソースコード を参照)。

1taketabulateなどの itertoolsレシピ を含む多くの便利なツールを実装するサードパーティパッケージ。

0
pylang