我想循环遍历一个迭代器的“片段”。我不确定是否可能,因为我了解到无法对迭代器进行切片。我想做的是这样的:
def f():
for i in range(100):
yield(i)
x = f()
for i in x[95:]:
print(i)
当然,这会失败:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-37-15f166d16ed2> in <module>()
4 x = f()
5
----> 6 for i in x[95:]:
7 print(i)
TypeError: 'generator' object is not subscriptable
有没有一种Pythonic的方法可以循环遍历生成器的“切片”?
基本上,我关心的生成器读取一个非常大的文件,并逐行执行一些操作。我想测试文件的片段以确保一切都按预期执行,但让它运行整个文件非常耗时。
编辑:
如上所述,我需要在文件上执行此操作。我希望有一种明确指定生成器的方式,例如:
import skbio
f = 'seqs.fna'
seqs = skbio.io.read(f, format='fasta')
seqs是一个生成器对象
for seq in itertools.islice(seqs, 30516420, 30516432):
#do a bunch of stuff here
pass
上述代码已经能够满足我的需求,但是由于生成器仍然需要遍历所有行,因此速度仍然非常慢。我希望只遍历指定的切片。
itertools.islice
?它是Python中的一个库函数,用于对迭代器进行切片操作。 - jonrsharpeislice
操作不能阻止它继续处理在您关心的行之前的行。最好为其提供文件的一个islice
。(您仍需要读取文件以查找换行符,但会跳过生成器在不需要的行上执行的任何处理。) - user2357112