Python 将列表元素与其他元素的总和赋值
我有一个2d矩阵,它可以是任何大小,但始终是正方形。我想在矩阵中循环,并且对于每个对角线元素(Python 将列表元素与其他元素的总和赋值,python,arrays,for-loop,matrix,Python,Arrays,For Loop,Matrix,我有一个2d矩阵,它可以是任何大小,但始终是正方形。我想在矩阵中循环,并且对于每个对角线元素(x,在本例中),我想为行中的所有其他值赋值1-sum\u,例如 Mtx = [[ x ,.2 , 0 ,.2,.2] [ 0 , x ,.4 ,.2,.2] [.2 ,.2 , x , 0, 0] [ 0 , 0 ,.2 , x,.2] [ 0 , 0 , 0 , 0, x]] for i in enumerate(Mtx): for j
x
,在本例中),我想为行中的所有其他值赋值1-sum\u,例如
Mtx = [[ x ,.2 , 0 ,.2,.2]
[ 0 , x ,.4 ,.2,.2]
[.2 ,.2 , x , 0, 0]
[ 0 , 0 ,.2 , x,.2]
[ 0 , 0 , 0 , 0, x]]
for i in enumerate(Mtx):
for j in enumerate(Mtx):
if Mtx[i][j] == 'x'
Mtx[i][j] = 1-sum of all other [j]'s in the row
我不知道如何计算每行j的总和您可以这样做:
from copy import copy
for i, row in enumerate(Mtx):
row_copy = copy(row)
row_copy.pop(i)
row[i] = 1 - sum(row_copy)
输出:
[[0.4, 0.2, 0, 0.2, 0.2], [0, 0.2, 0.4, 0.2, 0.2], [0.2, 0.2, 0.6, 0, 0], [0, 0, 0.2, 0.6, 0.2], [0, 0, 0, 0, 1.0]]
@DSM——是的。有时我会把注意力集中在问题的“困难”部分,而忘记了一些小细节。谢谢。想想看,你也不是真的在使用行
;当然你可以。现在我们要骑自行车了。(^)很好,很好,谢谢你的回答。
是python内置的“技巧”吗?@adohertyd
只是一个变量名。@adohertyd——嵌套循环完全没有必要:)。好的,我重新阅读了你的代码,我的评论是错误的。我将删除。谢谢badzil,但我认为其他答案更简单。您还可以通过row\u copy=row[:]
摆脱对copy
的依赖。仅供将来参考。@inspectorG4dget——起初我认为你也是对的,但他的解决方案是可以的,因为他是从复制的行中弹出的,而不是他分配到的行。@badzil:你的代码是正确的。我为错误的错误报告道歉。现在删除它。问题中没有提到x==0。@mgilson我可以指定0作为开始,而不是x。谢谢Ashwini,你总是能很好地回答我的问题。
mtx = [[ 0 ,.2 , 0 ,.2,.2],
[ 0 , 0 , .4 ,.2,.2,],
[.2 ,.2 , 0 , 0, 0],
[ 0 , 0 ,.2 , 0,.2],
[ 0 , 0 , 0 , 0, 0]]
for i in range(len(mtx)):
summ=sum(mtx[i])
mtx[i][i]=round(1-summ,2) #use round to get 0.4 instead of .39999999999999999
print(mtx)
[[0.4, 0.2, 0, 0.2, 0.2], [0, 0.2, 0.4, 0.2, 0.2], [0.2, 0.2, 0.6, 0, 0], [0, 0, 0.2, 0.6, 0.2], [0, 0, 0, 0, 1.0]]