2016-12-29 9 views
0

私はPythonにはかなり新しいです(私はC、C#にもっと慣れています)。私は学びたいと思っており、できるだけ「Pythonic」のようなことをしたいと思っています。Pythonで区間を適切に反復処理する方法は?

私は間隔をあけて反復し、その間に数字があるかどうかに基づいて何かをしたいと思います。私はインデックスを使用してアクセスするというのが私の理解である様々な記事で読んで、私はnumpy.arrange(またはいくつかの他の配列定義のそれぞれで独立し)を使用して、私の間隔を作成し、しかしそう

ibins = numpy.arange(start = 19, stop = 67, step = 2) 
a = 50 
for idx, val in enumerate(ibins) : 
    if idx > 0: 
     if ibins[idx - 1] <= a < ibins[idx] : 
      #do something more meaningfull 
      print('Hello') 

などのビンを反復処理することができます知っていますbin要素はPythonでは「悪い形」とみなされます。私がやりたい何

はもっとこの

for ibin in ibins 
    if a is in ibin #somehow determine if a is in the bin 
     print('Hello') 

のようなものは、これを達成するための合理的な、短い方法はありますか?または、私の最初の提案が最善の方法です。

カスタムインターバルオブジェクトやそのようなものを作成したくありません。

+1

を印刷します!キーワードを変数名として使用しないようにしてください。 –

+0

@hiroprotagonistありがとうございました。私はあなたのコメントに従って投稿を編集しました。 – mortysporty

答えて

1
start = 19 
stop = 67 
step = 2 

for bin in [range(i, i+step) for i in range(start, stop, step)]: 
    if a in bin: 
     print('Hello') 

あなたはPythonの2を使用している場合は、はxrange方法は範囲よりも優れています。

+0

あなたは 'if a bin 'の意味ですか? (だから直接編集の代わりに6文字未満のコメントを編集することはできません) – Anupam

+0

@AnupamJainうん –

+1

はい...これは私が欲しいものです:)ありがとう! – mortysporty

1

これについての議論がここにあります:Iteration over list slices

はこれが最短のバージョンのいずれかです。

import numpy as np 

lst = np.arange(start = 19, stop = 67, step = 2) 
bin_width = 5 
search = 50 

for ibin in zip(*(iter(lst),) * bin_width): 
    print(ibin) 
    if min(ibin) <= search <= max(ibin): 
     print('found!') 
    # or this? not sure what you want... 
    if ibin[0] <= search <= ibin[-1]: 
     print('found!') 

これは `bin`のpythonのキーワードである

(19, 21, 23, 25, 27) 
(29, 31, 33, 35, 37) 
(39, 41, 43, 45, 47) 
(49, 51, 53, 55, 57) 
found! 
found! 
関連する問題