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

Python 用所有其他元素的总和替换每个元素,python,list,list-comprehension,python-3.5,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实现这一目标的优雅方法是: >>&g

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

[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

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

>>> my_list = [1, 2, 3]
>>> [sum(my_list)-x for x in my_list]
[5, 4, 3]
或者,最好在列表理解之外计算
sum
,这样您就不必每次都计算它(正如@Jean所指出的):



代码问题:您没有调用
()
求和
,而是尝试使用
[…]
访问其索引,导致
类型错误
。此外,您在迭代时修改原始列表,这将导致不同的结果(这对您来说是意外的结果)。您应该将这些值放在单独的列表中。

这里有多个问题
return
函数外部,更改调用时用于求和的列表,方括号。也许你来自另一种语言?不管是哪种方式,如果可以的话,可以浏览一下Python文档(请参阅),这会有所帮助。这应该存储在一个变量中,以避免出现这种情况。
>>> my_sum = sum(my_list)
>>> [my_sum-x for x in my_list]
[5, 4, 3]