【问题标题】:Taking absolute values of a list of numbers取数字列表的绝对值
【发布时间】:2021-05-25 01:47:25
【问题描述】:

我在 Stock 中检查过类似的分支,但都使用了一些准备好的库;这不是我想要的。

我想创建一个函数来获取数字列表,获取它们的绝对值并打印修改后的列表。这是我的代码:

def abs(array):
    for member in array:
        if member < 0:
            member = member * (-1)
        else:
            member = member

    print(array)

但它会打印原始列表。例如:

abs([1, -34, 23, 2342, 52, -3, -12, -123, -23])

给予:

[1, -34, 23, 2342, 52, -3, -12, -123, -23]

Process finished with exit code 0

 

【问题讨论】:

  • 我是 Python 新手。来自 Java。
  • 那是因为 abs 是一个预先存在的 Python 函数。尝试将您的函数命名为其他名称。
  • M-Chen-3,非常好的主意,但我刚刚尝试过(重命名了函数) - 却给出了相同的结果。

标签: python arrays list absolute


【解决方案1】:

试试:

import numpy as np

array= ...

np.abs(np.array(array))

numpy很强大,速度很快,尽快学会使用。

编辑,因为问题是如何对列表的每个元素执行函数并将这些结果包装在相同长度的列表中:

想到两个解决方案:

  • 硬核python风格:
[x if x<0 else -x for x in array]

括号表示我想要一个列表,在里面我写函数,我说在哪里可以找到我的函数的参数。

[abs(x) for x in array]
[f(x) for x in array] # for any defined f that can handle every element of array
  • map(lambda x : f(x), array)

你在数组的元素上创建一个映射。对于这些元素,您应用 lambda。 lambda 是一种在本地非常本地地定义函数的方法。

list(map(lambda x : abs(x),array))

最后,您从映射中创建一个列表,以检索结果。如果不这样做,它将保留为抽象,即数组与尚未实例化的事物之间关系的定义。

【讨论】:

  • 感谢您的建议。想学习核心原则。
  • 好的,试试这个:[x if x>0 else -x for x in array]
  • 另一种解决方案是使用 map lambda : list(map(lambda x : abs(x), array)))。
【解决方案2】:

在 Python 中,如果您以这种方式使用 for,则不会将值分配到数组中。 试试这个代码。

def abs(array):
for i in range(len(array) - 1):
    if array[i] < 0:
        array[i] = array[i] * (-1)

print(array)

【讨论】:

  • 我想问题是我使用的方式不能用于更改列表成员。它只能用于访问它们。非常感谢!
【解决方案3】:

问题在于你正在使用的循环,尝试这样修改它

def abs1(array):
    for i in range(len(array)):
        if array[i] < 0:
             array[i] = array[i] * (-1)
    print(array)

原因是您之前使用的循环只是为了 访问列表元素但没有给您参考以更改列表中的任何内容我通过使用列表上的索引解决了它。

【讨论】:

  • 我做了必要的编辑,是的,这只是为了解释东西没有返回任何东西,所以我可以修改它,只是打印它
  • 成功了!谢谢你,骑士骑士!习惯了来自 java 的 Python 有点痛苦。
  • @ZeynalBagırov 欢迎:D,是的,我目前也在学习 Python,从 CPP 转移
  • @ZeynalBagırov array[i] = -array[i] 更干净一点,如果你愿意的话。
  • @Calculuswhiz 谢谢!是的!
【解决方案4】:

您的代码有两个错误:

  1. abs 是一个预先存在的 Python 函数。永远不要用一个已经存在的函数来命名你自己的函数;它可能会导致意外行为。

  2. 您不应该修改函数中的参数。相反,创建一个新数组并返回它。

以下是更正后的代码:

def list_abs(array):
    new_array = []
    for member in array:
        if member < 0:
            new_array.append(member * (-1))
        else:
            new_array.append(member)
    return new_array

array = [2, 3, 4, -5, -6, 7, -8]
print(list_abs(array))
# Prints [2, 3, 4, 5, 6, 7, 8]

【讨论】:

  • 我想问题是我使用的方式不能用于更改列表成员。它只能用于访问它们。非常感谢!
猜你喜欢
  • 2019-02-13
  • 2010-12-27
  • 1970-01-01
  • 2014-02-08
  • 2021-06-30
  • 1970-01-01
  • 1970-01-01
  • 2021-03-02
  • 1970-01-01
相关资源
最近更新 更多