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

use*_*016 8 python iterator for-loop

在python中有一个强大的通用方法来跳过for循环中的第一个元素吗?

我能想到的唯一方法是手工编写一个特殊的发电机:

def skipFirst( it ):
    it = iter(it) #identity for iterators
    it.next()
    for x in it:
        yield x
Run Code Online (Sandbox Code Playgroud)

并使用它例如:

for x in skipFirst(anIterable):
    print repr(x)
Run Code Online (Sandbox Code Playgroud)

并喜欢:

doStuff( str(x) for x in skipFirst(anIterable) )
Run Code Online (Sandbox Code Playgroud)

并喜欢:

[ x for x in skipFirst(anIterable) if x is not None ]
Run Code Online (Sandbox Code Playgroud)

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

Nee*_*rma 16

for i in list1[1:]: #Skip first element
    # Do What Ever you want
Run Code Online (Sandbox Code Playgroud)

说明:

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


Mar*_*ers 10

当只跳过一个项目时,我会使用以下next()功能:

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

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

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

from itertools import islice

for elem in islice(it, 1, None):
    # all but the first element
Run Code Online (Sandbox Code Playgroud)


use*_*016 6

我认为itertools.islice会做到这一点:

islice( anIterable, 1, None )
Run Code Online (Sandbox Code Playgroud)