擅长:python、mysql、java
<p>当你写作时</p>
<pre class="lang-py prettyprint-override"><code>i for x in range(1,i+1)
</code></pre>
<p>这是一个“生成器表达式”,它产生一个“生成器”(<code><generator object at ...></code>),它是一个“iterable”。列表也是不可编辑的。生成器的优点是,当您对元素表达式进行迭代时,它实际上只对其求值(此处<code>i</code>)</p>
<p>不过,你似乎想要一份实际的清单。您可以立即创建如下列表:</p>
<pre class="lang-py prettyprint-override"><code>[i for x in range(1,i+1)]
</code></pre>
<p>或者在您的代码中:</p>
<pre class="lang-py prettyprint-override"><code>for i in range(1,5):
print([i for x in range(1,i+1)])
</code></pre>
<p>表达式<code>[... for ... in ...]</code>是一个“列表理解”。它看起来类似于生成器表达式,但它直接创建列表,而不使用生成器。列表理解首先出现在Python中,然后是生成器表达式。它们在不同的大括号中具有相同的语法</p>
<p>如果您已经有了生成器,还可以将其转换为列表:</p>
<pre class="lang-py prettyprint-override"><code>for i in range(1,5):
gen = (i for x in range(1,i+1))
print(list(gen)) # get all the elements and make a list
</code></pre>
<p>然后,该生成器“用完了”,没有更多的元素可以提供</p>