Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将列表元素与其他元素的总和赋值_Python_Arrays_For Loop_Matrix - Fatal编程技术网

Python 将列表元素与其他元素的总和赋值

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

我有一个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 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]]