<p>可以使用自定义函数返回生成器:</p>
<pre><code>def drop(iterable,start,end):
for i,x in enumerate(iterable):
if x==start :
for y in iterable[i:]:
if y!=end:
yield y
else:
yield end
break
</code></pre>
<p>演示:</p>
<pre><code>list1 = ['Mary','had','a','little','lamb','which','was','very','naughty']
print list(drop(list1,'little','very'))
['little', 'lamb', 'which', 'was', 'very']
</code></pre>
<p><em>注意</em>这个解决方案比使用<code>list.index</code>要快,因为它的顺序是O(n),您使用它2次,但是对于前面的函数,您在<code>iterable[i:]</code>中对所有列表进行1次迭代,另外还有一个索引,它的顺序小于O(n),所以速度更快。你知道吗</p>
<p>为了更好地理解,请查看以下基准:</p>
<pre><code>from timeit import timeit
s1="""
list1 = ['Mary','had','a','little','lamb','which','was','very','naughty']
list1[list1.index("little"):list1.index("very")+1]
"""
s2="""
def drop(iterable,start,end):
for i,x in enumerate(iterable):
if x==start :
for y in iterable[i:]:
if y!=end:
yield y
else:
yield end
break
list1 = ['Mary','had','a','little','lamb','which','was','very','naughty']
drop(list1,'little','very')
"""
print ' first: ' ,timeit(stmt=s1, number=1000000)
print 'second : ',timeit(stmt=s2, number=1000000)
</code></pre>
<p>结果:</p>
<pre><code> first: 5.87736296654
second : 5.01044201851
</code></pre>