python - 比较列表中整数与给定值的差异

标签 python algorithm python-2.7

我的 Python 有点生疏,我在使用这个 super 简单的算法时遇到了麻烦。

我正在尝试编写一个函数,该函数采用两个参数(目标、值)来查找值中的哪个数字最接近目标数字;如果碰巧出现平局,则选择较小的数字。

这是我的进度,但我只选择了较小的数字,而没有实际比较列表中的值与目标的相对距离之间的差异。

所以,从本质上讲,我的函数实际上根本没有正确完成挑战,因为 47 实际上比 31 更接近 46;但是,如果列表中包含的数字假设为 45 和 47,那么它们与我的目标数字的距离相等,因此应该打印 45 而不是 47。

我更喜欢使用简单的 for/if/while 循环的答案,这样我才能真正练习我的技能。

也欢迎提供详细解释的其他更高级的答案。

编辑

你们几个非常好的答案,非常感谢;我正在对它们进行测试,并会选择最适合我的风格的一个,并将其余的用作引用,即使您有最好的单行答案也是如此。

target = 46
values = [1, 22, 31, 47, 87, 99]

def closest_to_target(target, values):

    lower = []

    for number in values:
        if number < target:
            lower.append(number)

    if lower:
        lowest = sorted(lower, reverse=True)[0]
        return lowest

    else:
        return "Error handling array"


print closest_to_target(target, values)

最佳答案

您只选择小于目标的数字,而不考虑差异。对于您要求的基本代码示例,您想考虑对线性搜索进行修改,但只需跟踪最低差值和产生该最低差值的值。

    def closest(target, values):
        smallest_difference = #a really large value to start
        closest_number = None
        for number in values:
            diff = abs(number - target)
            if diff == smallest_difference and number < closest_number:
               closest_number = number
            if diff < smallest_difference:
               closest_number = number
               smallest_difference = diff
        return closest_number

此方法的优点是您无需创建额外的列表。

关于python - 比较列表中整数与给定值的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50071280/

相关文章:

python - 如何找到 N 个数字,其总和最接近 K 但在多个列上?

c++ - 从中序和先序遍历构造二叉树的时间复杂度

python 列表索引越界

Python 2.7 下载图像

python - 在 OS X 中创建包安装程序——安装 Python、NumPy 和其他依赖项

python - 从列表中删除重复项

python - 在 python 中总结列表——有更好的方法吗?

python - Scrapy 将子站点项与站点项合并

algorithm - 将元素装入框

python - 使用生成器表达式返回多个值