如何找到一个数字在一组连续整数中所处的位置



我有一个数字变量和一组连续的整数。随着数字变量的变化,我需要记录数字变量在整数序列集中的位置。

例如,如果我的整数集是:

li = [20,21,22,23,24,25,26,27,28,29,30]

数字变量是:

num = 22.74

我想要的输出是列表中num介于以下位置之间的位置:

2,3

我知道li.index(22)会返回该位置,但前提是该项目在列表中。如果数字介于两个项目之间,我还不知道如何找到位置。

我想象一个for循环,通过检查num是否在这两个整数之间,将num与列表中的每个相邻位置项进行比较,可以解决这个问题

for x and the following item in li:
if x < num < the following item:
positionone = x
positiontwo = the following item
else:
continue

只是还没能完成这项工作,主要是通过获得列表的下一个位置来代替">下面的项目";。也许有更好的方法来计算这个?非常感谢您的帮助!谢谢

您已接近基本逻辑。您需要遍历列表。如果你使用索引而不是值,你将能够检索到你想要的位置。你的基本逻辑很好。

for idx in range(len(li)-1):
if li[idx] < num < li[idx+1]:
pos1, pos2 = idx, idx+1

既然如此,我希望你能把平等问题作为一个特例来解决,对吧?

我不会触及关于num是否为整数的模糊性。但我会给你答案所需的工具。

lohi分别为您感兴趣的下限和上限。然后,要得到这两者之间的数字的索引,可以这样做:

indices = [i for i, x in enumerate(li)
if lo < x < hi]

请注意,我在那里用了两次<。如果希望下界包含,请将第一个<替换为<=。类似地,如果您希望上界是包含的,请将第二个<替换为<=。或者非常普遍:

def indices_between(iterable, lo, hi, include_lo=False, include_hi=False):
lo_req = (lambda x: lo <= x) if include_lo else (lambda x: lo < x)
hi_req = (lambda x: x <= hi) if include_hi else (lambda x: x < hi)
return [i for i, x in enumerate(iterable)
if lo_req(x) and hi_req(x)]

您可以将您的数字与每个元素进行比较,如果当前元素大于您的数字,则中断循环:

for index, current_element in enumerate(li):
if current_element > num:
position_one, position_two = index - 1 if index else index, index
break
else:
position_one, position_two = index, index

一种数学方法是从列表中减去数字,并检查两个最小绝对值。如果li是一个numpy数组,您可以在一行中完成:

li = np.array(li)
interval = sorted(np.abs(li-num).argsort()[:2])

相关内容

  • 没有找到相关文章

最新更新