在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:])
执行切片,但这会产生副本,并不适用于所有序列,迭代器,集合等。
答案 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