<p>你的理解之所以有效是因为<code>x</code>是<em>值</em>,比如<code>"a"</code>,而不是<em>索引</em>,比如<code>0</code>,当然<code>"a"</code>不在<code>[0, 2]</code>。你知道吗</p>
<p>要获得索引和值,需要<a href="https://docs.python.org/3/library/functions.html#enumerate" rel="nofollow">^{<cd6>}</a>。然后你可以这样做:</p>
<pre><code>print([x for i, x in enumerate(list) if i not in i_to_skip])
</code></pre>
<p>另外,请注意,打印生成器表达式(就像您所做的那样)只会打印类似<code><generator object <genexpr> at 0x1055fd8b8></code>的内容;这就是为什么我将您的代码转换为打印出一个列表理解,所以您会得到<code>['b', 'd']</code>。你知道吗</p>
<hr/>
<p>如果您想打印,比如说,一次打印一行,您可以在生成器表达式上循环:</p>
<pre><code>for x in (x for i, x in enumerate(list) if i not in i_to_skip):
print(x)
</code></pre>
<p>但实际上,更容易把它折叠成一个循环:</p>
<pre><code>for i, x in emumerate(list):
if i not in i_to_skip:
print(x)
</code></pre>
<p>或者,更简单的是,用一个表达式格式化整件事,可能是这样的:</p>
<pre><code>print('\n'.join(x for i, x in enumerate(list) if i not in i_to_skip))
</code></pre>
<p>…甚至让<code>print</code>为你做:</p>
<pre><code>print(*(x for i, x in enumerate(list) if i not in i_to_skip), sep='\n')
</code></pre>
<hr/>
<p>最后,顺便说一句,调用list<code>list</code>是个坏主意;它隐藏了类型/构造函数,以后可能会用到它,而且还会使代码产生误导。你知道吗</p>