<p>这里有几个问题:
首先,位于<code>readast()</code>顶部的循环将list1设置为<code>[]</code>15次-我不确定您在这里要做什么。如果您试图生成15组x,y,z坐标,那么这是第二个<code>range</code>-在您的示例中<code>range(3)</code>
-你需要改变。</p>
<p>然后继续将[x,y,z]的列表添加到(相同的)list1,然后将list1的<em>整个</em>添加到astlist。但是,Python实际上会将一个<strong>指针存储到列表中,而不是将一个<strong>副本存储到列表中,因此当您将项添加到list1时,它会将项添加到list1,其中list1包含在另一个列表中:
在本例中,为了清楚起见,随机数被序列号替换(第一个随机数是<code>1</code>,第二个是<code>2</code>,依此类推):</p>
<p>第一个循环后:</p>
<pre><code>list1: [[1,2,3]]
astlist: [[[1,2,3]]]
</code></pre>
<p>第二个循环后:</p>
<pre><code>list1: [[1,2,3],[4,5,6]]
astlist: [[[1,2,3],[4,5,6]],[[1,2,3],[4,5,6]]]
</code></pre>
<p>等等</p>
<p>如您所见,list1现在是列表列表,astlist现在是list1的副本列表(列表列表)</p>
<p>列表1可能是多余的,您可能只需要</p>
<p><code>astlist.append([x,y,z])</code></p>
<p>在第一点。</p>
<p>在第二个函数中,使用</p>
<pre><code>for row in range(len(astlist)):
x,y,z=astlist[row]
...
</code></pre>
<p>但事实上,以下情况会更好:</p>
<pre><code>for row in astlist:
x,y,z=row
...
</code></pre>
<p>甚至:</p>
<pre><code>for x,y,z in astlist:
...
</code></pre>
<p>当Python中的<code>for</code>循环遍历序列(或其他iterable值)的成员时,它就不仅仅是一个简单的计数器。使用<code>range(len(astlist))</code>构造实际上是生成一个列表[1,2,3…]并对其进行迭代。</p>
<p>如果您特别需要一个数字索引,那么可以使用<code>enumerate</code>函数,该函数返回一系列(索引、值)对,您可以对这些对进行迭代:</p>
<pre><code>for i,value in enumerate(['apple','banana','cherry']):
print 'value {} is {}'.format(i,value)
value 0 is apple
value 1 is ball
value 2 is cherry
</code></pre>
<p>希望这有帮助</p>