<p><code>zip</code>是正确的方法,如aga所示。</p>
<p>但如果你想知道为什么你的原始代码不起作用:</p>
<pre><code>for i in results:
for j in range(numCenturies):
rotated[i][j] = results [j][i]
</code></pre>
<p>这里有两个明显的问题,可能还有另外两个。(因为您没有向我们展示足够的代码或数据来确定,所以我无法保证这两个可能的代码或数据。)</p>
<p>可能<code>results</code>看起来像这样:</p>
<pre><code>results = [[1, 2, 3], [4, 5, 6]]
</code></pre>
<hr/>
<p>当你做<code>for i in results</code>时,这意味着<code>i</code>将是结果中的每个元素,也就是说,它将是<code>[1, 2, 3]</code>,然后是<code>[4, 5, 6]</code>。不能将列表用作列表的索引,因此这保证会给您一个<code>TypeError: list indices must be integers, not list</code>。</p>
<p>要解决此问题,您需要:</p>
<pre><code>for i in range(len(results)):
</code></pre>
<p>……或者</p>
<pre><code>for i, row in enumerate(results):
</code></pre>
<hr/>
<p>接下来,<code>results[j][i]</code>保证提高<code>IndexError: list index out of range</code>,因为<code>i</code>是每个<em>行</em>数,但您试图将其用作<em>列</em>数。如果在<code>results</code>的行和列上迭代,则需要:</p>
<pre><code>rotated[j][i] = results[i][j]
</code></pre>
<hr/>
<p>接下来,除非用3个列表预先填充<code>rotated</code>,每个列表都预先填充了2个某种类型的对象,否则将得到<code>IndexError: list assignment index out of range</code>。</p>
<p>要解决此问题,需要预先填充<code>rotated</code>,如下所示:</p>
<pre><code>rotated = [[None for j in range(2)] for i in range(3)]
</code></pre>
<p>……或者</p>
<pre><code>rotated = [[None, None], [None, None], [None, None]]
</code></pre>
<hr/>
<p>最后,我敢打赌<code>numCenturies</code>是3,在这种情况下,只要<code>j</code>到达<code>2</code>就可以得到另一个<code>IndexError: list index out of range</code>。在这里,最简单的方法就是使用行的长度;这样就不可能出现一次性错误。</p>
<p>总而言之:</p>
<pre><code>rotated = [[None for j in range(2)] for i in range(3)]
for i, row in enumerate(results):
for j, value in enumerate(row):
rotated[j][i] = value
</code></pre>
<hr/>
<p>但一般来说,Python提供了比预先创建数组和循环索引来填充值更简单的方法。您可以使用<code>append</code>-或者更好的是,使用列表理解。或者,更好的是,找到一种更高级的方法来编写您的使用,比如对<code>zip</code>的单个调用。</p>