<p>他们说了什么。但如果要在创建列表时执行此操作,可以执行以下操作:</p>
<pre><code>arr = [u + 1 for u in range(10)]
</code></pre>
<p>我猜你用的是python3。如果您使用的是Python 2,那么将<code>range</code>更改为<code>xrange</code>(除非列表大小非常小),因为Python 2 <code>range</code>函数返回一个实际的<code>list</code>,但是<code>xrange</code>返回一个迭代器;Python 3 <code>range</code>函数返回一个与旧的<code>xrange</code>类似的迭代器(但是有一些改进)。你知道吗</p>
<p>如果<code>arr</code>是要修改的现有<code>list</code>,而不使用新的<code>list</code>对象替换当前的<code>list</code>对象,则可以</p>
<pre><code>arr[:] = [u + 1 for u in arr]
</code></pre>
<hr/>
<p>下面的一些代码说明了在赋值的左侧使用<code>arr</code>和<code>arr[:]</code>之间的区别。你知道吗</p>
<pre><code>arr = list(range(10))
b = arr
print(id(arr), id(b))
arr = [u + 1 for u in arr]
print(id(arr), id(b))
print(arr, b)
c = arr
print(id(arr), id(c))
arr[:] = [u + 1 for u in arr]
print(id(arr), id(c))
print(arr, c)
</code></pre>
<p><strong>输出</strong></p>
<pre><code>3073636268 3073636268
3073629964 3073636268
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
3073629964 3073629964
3073629964 3073629964
[2, 3, 4, 5, 6, 7, 8, 9, 10, 11] [2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
</code></pre>
<p>因此<code>arr = [u + 1 for u in arr]</code>将名称<code>arr</code>绑定到一个新的列表对象,但是<code>arr[:] = [u + 1 for u in arr]</code>有效地改变了现有的列表对象。”它在hood下创建一个新的临时列表对象,然后将其内容复制到旧的列表对象。你知道吗</p>