Check io解析之Nearest Value

关于此题没有找到大神的代码,只能厚颜无耻的贴自己写的代码了。废话不多说,看题。
题目要求:
找到最接近给定值的值。
系统将以集合形式为您提供一个值列表,并为您提供一个需要查找最近值的值。
例如,我们有以下一组数字: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

列表切片,切来切去,快把我自己切晕了,肯定有更简洁的方法,欢迎大家批评指正。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云锦Python自学之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值