it = (i for i in range(10,20))
これはちょっと冗長です、なぜ単にrange(10,20)
(またはxrange
)を使用しないのですか?
dropwhile
引数として関数を期待し、ブール値を提供しているため、コードが壊れています(関数enumerate
を数値3と比較して作成されていますが、これは少し奇妙です!)
enumerateを使用するソリューションは、次のようになります。
a = dropwhile(lambda (i,val): i<3), enumerate(seq))
ただし、a
それでも列挙されたペア(インデックス、値)のリストです。
より効率的な方法は、おそらく次のようになります。
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の要素ごとに1回呼び出され、毎回次の番号を返します。
そうは言っても、あなたは:を使用する方がはるかに良いですitertools.islice
:
import itertools
a = itertools.islice(range(10, 20), 3, None)
islice
リストスライスとよく似myList[3:]
たスライス(この場合は要素#3から最後まで)を実行できますが、引数として任意のシーケンスを取ることができます。