2013-12-19 11 views
7

forループの最初の要素をスキップする、堅牢で汎用的な方法がPythonにありますか?`for`ループの最初の要素をスキップする方法は?

私は考えることができる唯一の方法は、手で特別なジェネレータ書くことです:

def skipFirst(it): 
    it = iter(it) #identity for iterators 
    it.next() 
    for x in it: 
     yield x 

をなどの例のためにそれを使用します。

for x in skipFirst(anIterable): 
    print repr(x) 

など:

doStuff(str(x) for x in skipFirst(anIterable)) 

など:

[ x for x in skipFirst(anIterable) if x is not None ] 

私はitertools.isliceは、トリックを行うだろうと思い

答えて

5

我々はリスト(x for x in aList[1:])上のスライスを行うことができます知っているが、これはコピーを作成し、全てのシーケンスのために動作しない、イテレータ、コレクションなど:

islice(anIterable, 1, None) 
6

それを与えることによって

it = iter(iterable_or_sequence) 
next(it, None) # skip first item. 
for elem in it: 
    # all but the first element 

:ちょうど項目をスキップすると、私はnext() functionを使用したいです2番目の引数、デフォルト値を指定すると、StopIteration例外が発生します。インポートを必要とせず、煩雑なループ設定を簡素化し、forループを使用して条件付きで項目をスキップすることができます。

あなたが最初の項目をスキップitのすべての要素を超える反復に期待していた場合は、itertools.islice()が適切である:

from itertools import islice 

for elem in islice(it, 1, None): 
    # all but the first element 
+0

うわー、私はそのバージョンを知らなかった。しかし、 'doStuff(str(x)for x for next(anIterable、None))'と書くことはできますか?私はそうは思わない。 – user2622016

+0

@ user2622016:私は基本的にあなたの質問の最初の半分だけを見て、 'it.next()'を使って 'StopIteration'をキャッチしました。 'next(それ、None)'は読むのがずっと簡単かもしれません。 –

+0

ああ、申し訳ありませんが、 'next( 'asdf'、None)'はうまくいかず、暗黙的にシーケンスをイテレータに変更しません。 – user2622016

0
def skip_first(iterable): 
    """Short and sweet""" 

    return (element for i, element in enumerate(iterable) if i) 

def skip_first_faster(iterable): 
    """Faster, but meh""" 

    generator = (element for element in iterable) 
    next(generator, None) # None Prevents StopIteration from being raised 

    return generator 

if __name__ == '__main__': 
    for item in skip_first(range(5)): 
     print item 

    for item in skip_first_faster(range(5)): 
     print item 
9
for i in list1[1:]: #Skip first element 
    # Do What Ever you want 

説明:

ますforループリストで[1:]を使用すると、最初の要素をスキップしてl 2番目の要素から最後の要素に至るまで

+0

そこには、これはよく質問に答えるかもしれませんが、他のユーザーがあなたほど知識がないかもしれないことを認識しています。なぜこのコードが機能するのかについて、少し説明を加えてみませんか?ありがとう! – Vogel612

+0

あなたの提案をありがとう。 説明:list1 [1:]のi:for: forループリストで[1:]を使用すると、最初の要素をスキップし、2番目の要素から最後の要素にループを開始します。 –

関連する問題