2016-10-24 20 views
1

私は反復可能性があり、要素が特定の述語と一致する限り要素をスキップしたいとします。 現在のイテレータに影響を与えたい、新しいものを返さない反復可能なアイテムをスキップするPythonの方法はありますか?

# untested, just for explanation 

e = next(iterable) 
while True: 
    if something(e): 
     e = next(iterable) 
    else: 
     break 

をしかし、このための組み込み関数、またはいくつかの一般的なイディオムがあります:

私は単にこれを行うことができますか?

答えて

0

理由だけ

e = next(iterable) 
while something(e): 
    e = next(iterable) 

また、なぜ「私は現在のイテレータに影響を与えるようにしたい、新しいものを返さない。」ではありませんか?私はあなたがそれを必要とするときにシナリオを考えることができません。新しいイテレータが現在のウィジェットをラップすることを許可している場合は、itertools.dropwhileが示唆しているのはもっとPythonic(かつ判読可能)です。

0

あなたの例では、単なる最初の偽の結果の後に停止し、これは同じことを行います。

>>> it = iter(range(100000)) # just constructing _an_ iterator 
>>> next(itertools.filterfalse(lambda i: i != 12, it)) 
12 

私は何に明確ではないよ - 正確に - 「私は現在のイテレータに影響を与えるようにしたい、戻りません新しいもの "とは意味しますが、it自体が先進的であることに注意してください。

>>> next(it) 
13 
関連する問題