<h2>解决方案</h2>
<p><strong>您的代码不起作用,因为</strong>您实际上是在计算方阵第一行与自身的差异</p>
<pre class="lang-py prettyprint-override"><code># this picks up members of first row (left to right)
sumleftdiagonal += lis[0 + counter]
# this picks up members of first row (right to left)
sumrightdiagonal += [n - counter]
counter += 1
</code></pre>
<p>您可以验证我使用的伪数据的<code>sumleftdiagonal = [ 1, 2, 3, 4, 5]</code>和<code>sumrightdiagonal = [5, 4, 3, 2, 1]</code></p>
<h2>纯肾盂液</h2>
<h3>方法一:<code>just python</code></h3>
<pre class="lang-py prettyprint-override"><code># using the dummy data below: sum(diag_left - diag_right) = 0
n = arr[0]
sum([arr[1+n*i+i] - arr[1+(n-1)*(i+1)] for i in range(n)])
</code></pre>
<p><strong>输出</strong>:</p>
<pre class="lang-sh prettyprint-override"><code>0
</code></pre>
<h2>使用<code>numpy</code></h2>
<p>如果您可以使用<code>numpy</code>,那么至少有两种方法</p>
<h3>方法2:使用<code>numpy</code></h3>
<pre class="lang-py prettyprint-override"><code>import numpy as np
def diagdiff(arr):
n, arr = arr[0], arr[1:]
arr = np.array(arr).reshape((n,n))
return sum(np.diag(arr) - np.diag(np.fliplr(arr)))
# Dummy Data
a = np.arange(25).reshape((5,5)) + 1
print(f'square-array: \n\n{a}\n')
arr = [int(np.sqrt(a.size))] + a.flatten().tolist()
dd = diagdiff(arr)
print(f'diagonal-difference: {dd}')
</code></pre>
<p><strong>输出</strong>:</p>
<pre class="lang-sh prettyprint-override"><code>square-array:
[[ 1 2 3 4 5]
[ 6 7 8 9 10]
[11 12 13 14 15]
[16 17 18 19 20]
[21 22 23 24 25]]
diagonal-difference: 0
</code></pre>
<h3>方法3:使用<code>numpy</code></h3>
<pre class="lang-py prettyprint-override"><code>n, a = arr[0], np.array(arr[1:])
a = a.reshape((n,n))
sum([a[i, 0+i] - a[i, -(1+i)] for i in range(n)])
</code></pre>
<p><strong>输出</strong>:</p>
<pre class="lang-sh prettyprint-override"><code>0
</code></pre>