用所有其他元素的总和替换每个元素

时间:2017-11-23 21:29:50

标签: python list list-comprehension python-3.5

我必须用列表中所有其他元素的总和替换列表中的每个元素。

[1, 2, 3] => [5, 4, 3]
[1] => [0]
[2, 7, 9] => [16, 11, 9]

到目前为止我已经完成了:

for i in range(len(numbers)):
    numbers[i] = sum[numbers[:i]] + sum[numbers[i+1:]]
return numbers

但我一直在TypeError

1 个答案:

答案 0 :(得分:3)

实现这一目标的优雅方式将是:

>>> my_list = [1, 2, 3]
>>> [sum(my_list)-x for x in my_list]
[5, 4, 3]

或者,甚至可以更好地计算列表理解之外的sum,这样您就不必每次都计算它(如 @Jean 所指出的那样):

>>> my_sum = sum(my_list)
>>> [my_sum-x for x in my_list]
[5, 4, 3]

您的代码问题:您没有致电()sum,而是尝试使用[..]访问其索引,从而导致TypeError }。此外,您在迭代时修改原始列表,这将导致不同的结果(这对您来说是意想不到的结果)。您应该将这些值放在单独的列表中。