it = (i for i in range(10,20))
这有点多余,为什么不简单地使用range(10,20)
(或xrange
)?
您的代码中断是因为dropwhile
需要一个函数作为其参数,并且您提供了一个布尔值(通过将函数enumerate
与数字 3 进行比较来生成,这有点奇怪!)
使用枚举的解决方案可能如下所示:
a = dropwhile(lambda (i,val): i<3), enumerate(seq))
但 thena
仍然是枚举对(索引,值)的列表。
一种更有效的方法可能如下所示:
class Counter:
def __init__(self):
self.n = 0
def __call__(self):
current = self.n
self.n += 1
return current
(在这里查看实际操作,这很简单)
那么你可以像这样使用它:
c = Counter()
a = dropwhile(lambda elem: c() < 3, seq)
这使您可以使用dropwhile
. 您的计数器实例为 seq 中的每个元素调用一次,并且每次都给出下一个数字。
也就是说,你最好使用itertools.islice
:
import itertools
a = itertools.islice(range(10, 20), 3, None)
islice
允许您像列表切片一样进行切片(就像myList[3:]
在这种情况下,从元素 #3 到结尾),但可以将任何序列作为其参数。