列表总和的绝对值

时间:2020-05-20 12:06:46

标签: python python-3.x

我需要获取具有 n 个元素的列表中每个元素的绝对值,并对所有元素求和(得出正数或零)。我不能使用任何图书馆,因为它是学校的作品。

我尝试使用下面的逻辑,但是一个只能获取总和的绝对值,而另一种格式无效。

p = [list]


a=sum(abs(p))

还有

p = [list]


a = abs(sum(p)

谢谢

4 个答案:

答案 0 :(得分:2)

我需要使用n个元素来获取列表中每个元素的绝对值,并对所有元素求和

您的拳头方法是TypeError,因为未定义整个列表的绝对值:

>>> abs([])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: bad operand type for abs(): 'list'

您的第二种方法计算的是绝对值之和的绝对值,而不是不是

您应该使用循环:

result = sum(abs(number) for number in your_list)

例如:

>>> your_list = [1, 2, -3, -5, 6, 0]
>>> # list of absolute values for each number
>>> [abs(number) for number in your_list]
[1, 2, 3, 5, 6, 0]
>>> sum(_)  # sum the list above
17

如果您想看中,请使用map

result = sum(map(abs, your_list))

您可能不应该在学校里把它交出来,因为它有点先进,但是窥视函数式编程的美感并没有什么坏处,

答案 1 :(得分:1)

手动进行

sum = 0
for i in range(0, len(p)):
    if(p[i] < 0):
       sum = sum - p[i]
    else:
       sum = sum + p[i]

答案 2 :(得分:0)

使用内置map

result = sum(map(abs, list))

它将abs应用于每个元素,并返回新的“列表”(实际上不是列表)
不会更改开始列表

答案 3 :(得分:0)

据我了解的问题,这可能是您的解决方案:

input_numbers = [-1, 2, 3, -4, 5, 6] # let's say it's your input

output = sum([abs(number) for number in input_numbers])

print(output) # 21

说明

我认为,您熟悉内置的sumabs,所以我要解释的是“发电机”。

newlist = [abs(number) for number in input_numbers]

print(newlist) # [1, 2, 3, 4, 5, 6]

要了解“发电机”,让我们以非单行样式将其重写:

newlist = list()
for number in input_numbers:
    newlist.append(abs(number))

print(newlist) # [1, 2, 3, 4, 5, 6]

老实说,我不知道还要添加什么,所以随时问一些问题:)