首页 > 解决方案 > 用户输入的数字位于数组中的哪两个数字中

问题描述

所以,如果 a=[1 , 2.3 , 5.5 , 6 , 3.2 , 4.8]和用户输入x = 2.2- 我应该得到像(1 , 2.3).

标签: python

解决方案


您的数组未排序,因此您可能有多个答案。把它想象成一个可以上下移动的图表,你的输入是画一条水平线。图形的哪些部分与该线相交。

>>> a = [1, 2.3, 5.5, 6, 3.2, 4.8]

>>> def sections(val, samples):
...     for (i, j) in zip(samples[:-1], samples[1:]):
...         if i <= val <= j:
...             yield (i, j)

>>> n = float(input('enter number: '))
2.2
>>> list(sections(n, a))
[(1, 2.3)]

这样多个交叉点也可以工作:

>>> list(sections(4, a))
[(2.3, 5.5), (3.2, 4.8)]

或者,如果您更喜欢单线:

>>> [x for x in map(lambda i: (a[i], a[i+1]) if (a[i] <= n <= a[i+1]) else None, range(len(a)-1)) if x]
[(1, 2.3)]

推荐阅读