如何在Python中正确迭代间隔?

时间:2016-12-29 09:57:21

标签: python iteration intervals

我是Python的新手(我更习惯于C,C#)。我正在努力学习,我想尝试做一些事情,如Pythonic'尽可能。

我想迭代间隔,然后根据数字是否在区间内做某事。我知道我可以使用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元素被视为“不良形式”&#39;在Python中。

我想做的是更像这样的事情

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

是否有合理,简短的方法来实现这一目标?或者我的第一个建议是最好的方式。

我不想创建自定义间隔对象或那种东西。

2 个答案:

答案 0 :(得分: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 方法优于范围

答案 1 :(得分: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!