如何跳过`for`循环中的第一个元素?

时间:2013-12-19 12:51:58

标签: python for-loop iterator

在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 ]

我知道我们可以对列表(x for x in aList[1:])执行切片,但这会产生副本,并不适用于所有序列,迭代器,集合等。

4 个答案:

答案 0 :(得分:12)

for i in list1[1:]: #Skip first element
    # Do What Ever you want

<强>解释

当你在for循环列表中使用[1:]时,它跳过第一个元素并从第二个元素开始循环到最后一个元素

答案 1 :(得分:9)

当仅跳过一个项时,我会使用next() function

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

通过给它第二个参数,一个默认值,它也会吞下StopIteration异常。它不需要导入,可以简化混乱的for循环设置,并且可以在 for循环中使用来有条件地跳过项目。

如果您希望迭代覆盖it跳过第一项的所有元素,那么itertools.islice()是合适的:

from itertools import islice

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

答案 2 :(得分:6)

我认为itertools.islice可以解决问题:

islice( anIterable, 1, None )

答案 3 :(得分: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