<p><code>np.append</code>不是列表克隆。这是一个笨拙的包装。最好学会正确使用它。</p>
<pre><code>xyz_list = frag_str.split()
nums = []
coords = []
for i in range(int(len(xyz_list)/4)):
nums.append(xyz_list[i*4])
coords.append(xyz_list[i*4+1:(i+1)*4])
nums = np.concatenate(nums)
coords = np.concatenate(coords)
</code></pre>
<p>List append更快,更容易初始化。<code>np.concatenate</code>可以很好地处理数组列表。<code>np.append</code>使用<code>concatenate</code>,但只接受两个输入。^如果列表包含数字或字符串,则需要{<cd6>}。</p>
<hr/>
<p>你没有给出<code>frag_str</code>的例子。但是<code>split</code>的名称和用法表明它是一个字符串。我认为其他任何东西都没有<code>split</code>方法。</p>
<pre><code>In [74]: alist = 'one two three four five six seven eight'.split()
</code></pre>
<p>这是一个字符串列表。使用索引,我可以构造两个列表:</p>
<pre><code>In [76]: [alist[i*4] for i in range(2)]
Out[76]: ['one', 'five']
In [77]: [alist[i*4+1:(i+1)*4] for i in range(2)]
Out[77]: [['two', 'three', 'four'], ['six', 'seven', 'eight']]
</code></pre>
<p>我可以从这些列表中创建数组:</p>
<pre><code>In [78]: np.array(Out[76])
Out[78]: array(['one', 'five'], dtype='<U4')
In [79]: np.array(Out[77])
Out[79]:
array([['two', 'three', 'four'],
['six', 'seven', 'eight']], dtype='<U5')
</code></pre>
<p>在第一种情况下,数组是1d,在第二种情况下,数组是2d</p>
<p>如果字符串包含数字,我们可以通过指定<code>dtype</code>来生成整数数组。</p>
<pre><code>In [80]: alist = '1 2 3 4 5 6 7 8'.split()
In [81]: np.array([alist[i*4] for i in range(2)])
Out[81]: array(['1', '5'], dtype='<U1')
In [82]: np.array([alist[i*4] for i in range(2)], dtype=int)
Out[82]: array([1, 5])
</code></pre>