关于此题没有找到大神的代码,只能厚颜无耻的贴自己写的代码了。废话不多说,看题。
题目要求:
找到最接近给定值的值。
系统将以集合形式为您提供一个值列表,并为您提供一个需要查找最近值的值。
例如,我们有以下一组数字:4、7、10、11、12、17,我们需要找到最接近数字9的值。如果我们按升序排序,那么数字9左边是数字7,右边是数字10。但是10比7更接近,这意味着正确的答案是10。
一些澄清:
如果两个数字的距离相同,则需要选择最小的一个;
数字集总是非空的,即大小>=1;
给定的值可以在这个集合中,这意味着它就是答案;
集合可以包含正数和负数,但它们总是整数;
集合没有排序,而是由唯一的数字组成。
输入:两个参数。集合形式的值列表。寻求的值是一个整数。
输出:Int。
需要达到的效果:
assert nearest_value({4, 7, 10, 11, 12, 17}, 9) == 10
assert nearest_value({4, 7, 10, 11, 12, 17}, 8) == 7
assert nearest_value({4, 8, 10, 11, 12, 17}, 9) == 8
assert nearest_value({4, 9, 10, 11, 12, 17}, 9) == 9
assert nearest_value({4, 7, 10, 11, 12, 17}, 0) == 4
assert nearest_value({4, 7, 10, 11, 12, 17}, 100) == 17
assert nearest_value({5, 10, 8, 12, 89, 100}, 7) == 8
assert nearest_value({-1, 2, 3}, 0) == -1
本人写的代码:
知识点:列表切片。
def nearest_value(values,one):
#解题思路:用value中的值分别减去one
# 将大于0的结果添加到numberd0中,并按从小到大排序
# 将小于0的结果添加到numberx0中,并按从小到大排序
# 比较numberd0中第一个数和numberx0中最后一位数的绝对值,取最小数
# 最小数再加上one,就是要求的数
numberd0 = []
numberx0 = []
for value in values:
number = value - one
if number > 0:
numberd0.append(number)
numberd0.sort()
if number == 0:
return one
if number < 0:
numberx0.append(number)
numberx0.sort()
if len(numberd0) != 0 and len(numberx0) != 0:
if numberd0[0] > -numberx0[-1]:
return numberx0[-1] + one
if numberd0[0] == -numberx0[-1]:
return numberx0[-1] + one
if numberd0[0] < -numberx0[-1]:
return numberd0[0] + one
if len(numberd0) != 0 and len(numberx0) == 0:
return numberd0[0] + one
if len(numberd0) == 0 and len(numberx0) != 0:
return numberx0[-1] + one
输出:
Example:
10
7
8
9
4
17
8
-1
列表切片,切来切去,快把我自己切晕了,肯定有更简洁的方法,欢迎大家批评指正。