查找列表中的最大绝对值

Posted

技术标签:

【中文标题】查找列表中的最大绝对值【英文标题】:Find the maximum absolute value in a list 【发布时间】:2020-07-31 01:22:56 【问题描述】:

我正在寻找随机列表中的最大绝对值。我需要在一个函数中创建它。我不确定我在这里做错了什么。我有一个 for 循环设置,所以它应该检查每个数字,但它只返回第一个值。

def main():
    print(maxabsinlst([-19, -3, 20, -1, 5, -25]))

def maxabsinlst(num):
    for x in (num):
        max_abs_value = num[5]
        if abs(x) > max_abs_value:
            max_abs_value = abs(x)
            return max(abs(max_abs_value))

main()

【问题讨论】:

它没有返回第一个值。 欢迎来到 Stack Overflow。如果它回答了您的问题,请不要忘记接受答案(勾选答案旁边的复选标记)。这样,您的问题就不会显示为未回答。还投票赞成好的答案。 – 从这里开始,请使用tour,阅读what's on-topic,并查看How to Ask a Good Question。 【参考方案1】:

最短的方法是:

def maxabsinlst(num):
    return max(map(abs, num))

map() 函数将abs() 应用于列表中的每个数字,并返回这些绝对值的列表,然后max() 查找列表中的最大值。

【讨论】:

你还在使用 Python 2? 不知道你在做什么。我在这里使用 Python 3。 在 Python 3 中它不是一个列表。 @superbrain 你在说什么?这是python3? 在 Python 3 中,map 不返回列表。【参考方案2】:

您在循环内将max_abs_value 分配给num[5]。而是将其分配为列表的第一个元素,然后循环遍历它与其他元素进行比较

def main():
    print(maxabsinlst([-19, -3, 20, -1, 5, -25]))

def maxabsinlst(num):
    max_abs_value = abs(num[0])
    for x in num[1:]:
        if abs(x) > max_abs_value:
            max_abs_value = abs(x)
    return max_abs_value

main()

In [36]: max(abs(i) for i in [-19, -3, 20, -1, 5, -25])
Out[36]: 25

【讨论】:

【参考方案3】:

你可以让它更简洁一些:

def max_abs_in_lst(num):
    num = [abs(i) for i in num]
    return max(num)

【讨论】:

【参考方案4】:

max_abs_value = num[5]

每次 for 循环运行时,都会将最大值设置为 -25。将值存储在for循环之外,并用max_abs_value = 0进行初始化

【讨论】:

【参考方案5】:

您的函数存在一些问题。首先,您在for 循环的每次迭代中设置max_abs_value。其次,您假设传递给函数的列表每次的长度都是 6。第三,您从未计算过num[5] 的绝对值。因此,您将abs(x) 与负数进行比较。第四,一旦发现 any 值大于max_abs_value,您就会从函数中返回。您无法保证它是列表中的最大值。

你想要的是

def maxabsinlist(num):
    max_abs_value=abs(num[0])
    for x in num[1:]:
        value=abs(x)
        if value > max_abs_value:
            max_abs_value=value
    return max_abs_value

【讨论】:

以上是关于查找列表中的最大绝对值的主要内容,如果未能解决你的问题,请参考以下文章

匹配绝对值并返回整列 EXCEL

从列表中删除数字而不更改总和

如何在方案中更改列表中的绝对值

查找数组中的绝对最小值

Scilab - 如何在具有原始符号的矩阵中获得最大绝对值?

算法与数据结构索引