【问题标题】:why absolute function returns -x instead of x?为什么绝对函数返回 -x 而不是 x?
【发布时间】:2020-09-02 23:16:15
【问题描述】:

我在 python 编程中创建了一个绝对函数来打印绝对值,但它没有返回我期望的值。

l1=[1,2,3,4,5,-1,-5,-9,10]
def absolute(x):
    if x>=0:
        return x
    else:
        return -x
print(sorted(l1, key=absolute))

输出:[1, -1, 2, 3, 4, 5, -5, -9, 10] 预期输出:[1, 1, 2, 3, 4, 5, 5, 9, 10]

如果可以的话,请快帮我??

【问题讨论】:

标签: python python-3.x absolute


【解决方案1】:

当您对列表进行排序时,您会获得列表中的项目以及比较它们的方法。如果您不指定键,则比较它们的实际值与整数比较。当您指定一个键时,排序算法会将 key(x) 与 key(y) 进行比较,而不是将 x 与 y 进行比较,以确定哪个应该是第一个。 无论如何,为了做你想做的事,你需要用它的 abs 值替换每个元素

print(sorted([abs(item) for item in l1])

(您不需要定义自己的绝对函数,但如果您使用absolute(item),它的工作方式相同

请注意,此处您不需要使用 key,因为列表正在比较已经具有绝对值的项目。

【讨论】:

    【解决方案2】:

    您正在使用您的函数作为 sorted 中的键,它只对列表进行排序。 如果你想在每个参数上应用这个函数,你可以使用 map。

    这是给你的例子,但最好使用abs

    l1=[1,2,3,4,5,-1,-5,-9,10]
    def absolute(x):
        if x>=0:
            return x
        else:
            return -x
    print(sorted(map(absolute, l1)))
    

    【讨论】:

    • 我认为每次“key”将每个值传递给绝对函数。在这里你没有使用排序功能。
    • 它比较返回的值,然后按它排序。 ii 不改变原始值,只对它们进行排序。
    【解决方案3】:

    该函数完全按照它应该做的事情:按元素的绝对值对元素进行排序。 |3| < |-5| 所以3 将在-5 之前。如果您希望列表包含已排序的绝对值,则需要先对其进行更改:

    output = sorted(map(abs, [1, -1, 2, 3, 4, 5, -5, -9, 10]))
    

    (注意abs 已经作为builtin function 存在)。

    【讨论】:

    • 但 abs 函数假设返回正值,为什么它显示为负值。
    • @GamblerAziz key 函数返回的内容仅用于在排序时比较值。它不会替换列表中的原始值。
    猜你喜欢
    • 2016-01-13
    • 2016-04-20
    • 2022-01-17
    • 1970-01-01
    • 2010-11-05
    • 2022-01-17
    • 1970-01-01
    • 2013-07-10
    • 2018-01-04
    相关资源
    最近更新 更多