python - 用户输入的数字位于数组中的哪两个数字中
问题描述
所以,如果
a=[1 , 2.3 , 5.5 , 6 , 3.2 , 4.8]
和用户输入x = 2.2
- 我应该得到像(1 , 2.3)
.
解决方案
您的数组未排序,因此您可能有多个答案。把它想象成一个可以上下移动的图表,你的输入是画一条水平线。图形的哪些部分与该线相交。
>>> 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)]
推荐阅读
- oracle - 在 oracle 中交叉查找而不创建表
- c++ - 在 C++ 中对地图 stl 进行排序;错误:与运算符不匹配 -
- java - iText 7 将 HTML 转换为 PDF - 如何查看整个宽表?
- python - 提高python heapq的性能?
- python - 读取 csv 文件,清理它,然后使用 Apache Beam 数据流将结果写成 csv
- javascript - 每当蛇吃了加速器时,我如何暂时加速我的蛇?
- java - 在 Java 中使用递归返回给定数字的二进制对数
- r - R 中的 list.files 返回非常不一致的结果
- c# - 从 IIS 管理器创建文件到虚拟磁盘(共享文件夹)
- qt - 为什么 QPushButton.resize() 在 QVBoxLayout 中不起作用?