擅长:python、mysql、java
<p>问题是第二部分并没有像你想象的那样</p>
<ul>
<li>这是标准列表的语法错误,您应该使用<code>[][]</code>,但是。。。在</li>
<li>第二个索引不是对单个子数组进行切片,切片返回第二个切片也将对其进行操作的列表列表</li>
</ul>
<p>您可以通过列表理解来修复它:</p>
<pre><code>>>> i, j = 3, 2
>>> subarray = [row[j-1:j+2] for row in TheSpiral[i-1:i+2]]
>>> print_matrix(subarray)
06 01 02
05 04 03
16 15 14
</code></pre>
<p>或者,您可以使用<code>numpy</code>(这可能有点过头了!!!)并使用原始语法:</p>
^{pr2}$
<p>要计算缓和曲线坐标:</p>
<pre><code>def spiral_coord(n):
k = int((n**0.5) // 2)
t = 2*k
m = (t+1)**2
for fn in (lambda: (-k, k-(m-n)), lambda: (-k+(m-n), -k), lambda: (k, -k+(m-n))):
if n >= m-t:
return fn()
m -= t
return k-(m-n-t), k
>>> mid = (5-1)//2
>>> i, j = map(lambda x: x+mid, spiral_coord(9))
>>> subarray = np.array(TheSpiral)[i-1:i+2,j-1:j+2]
>>> print_matrix(subarray)
23 24 25
08 09 10
01 02 11
</code></pre>