我需要获取具有 n 个元素的列表中每个元素的绝对值,并对所有元素求和(得出正数或零)。我不能使用任何图书馆,因为它是学校的作品。
我尝试使用下面的逻辑,但是一个只能获取总和的绝对值,而另一种格式无效。
p = [list]
a=sum(abs(p))
还有
p = [list]
a = abs(sum(p)
谢谢
答案 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
说明
我认为,您熟悉内置的sum
和abs
,所以我要解释的是“发电机”。
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]
老实说,我不知道还要添加什么,所以随时问一些问题:)