2016-12-29 14 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

'bin' это ключевое слово в питона! старайтесь избегать ключевых слов в качестве имен переменных. –

+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 in bin'? (SO не разрешает редактирования менее 6 символов, поэтому комментирование вместо прямого редактирования) – Anupam

+0

@AnupamJain Yeah –

+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!') 

печатается

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

 Смежные вопросы

  • Нет связанных вопросов^_^