擅长:python、mysql、java
<p>发生的情况是,<em>内部</em>迭代器在<em>外部</em>迭代器的第一次迭代后耗尽:</p>
<pre><code>s = 'abc'
it1 = enumerate(s)
it2 = enumerate(s)
for i, x in it1:
for j, y in it2: # < gets consumed when i = 0 and stays empty
...
</code></pre>
<p>相比之下:</p>
<pre><code>s = 'abc'
for i, x in enumerate(s):
for j, y in enumerate(s): # < gets recreated at each iteration
....
</code></pre>
<hr/>
<p>如果需要<em>持久性</em>,请将其括在<code>list</code>或<code>tuple</code>中:</p>
<pre><code>itr = list(enumerate(s))
print([(c1, c2) for j, c2 in itr for i, c1 in itr])
# [('a', 'a'), ('b', 'a'), ('c', 'a'), ('a', 'b'), ('b', 'b'), ('c', 'b'), ('a', 'c'), ('b', 'c'), ('c', 'c')]
</code></pre>
<p>尽管如此,请注意多次使用<code>enumerate()</code>与将其封装在<code>list</code>或<code>tuple</code>中的内存占用情况不同</p>