【发布时间】:2017-09-12 12:29:02
【问题描述】:
我试图在pysam module 的上下文中理解 Python 的迭代器。通过在所谓的 AlignmentFile 类上使用fetch 方法,可以得到一个适当的迭代器iter,它包含来自文件file 的记录。我可以使用各种方法来访问每条记录(可迭代),例如带有query_name 的名称:
import pysam
iter = pysam.AlignmentFile(file, "rb", check_sq=False).fetch(until_eof=True)
for record in iter:
print(record.query_name)
记录是成对出现的,所以人们会喜欢这样的东西:
while True:
r1 = iter.__next__()
r2 = iter.__next__()
print(r1.query_name)
print(r2.query_name)
调用 next() 可能不是处理数百万条记录的正确方法,但是如何使用 for 循环在成对的可迭代对象中使用相同的迭代器。我查看了 itertools 和 SOs Iterate an iterator by chunks (of n) in Python? [duplicate](甚至是重复的!)和 What is the most “pythonic” way to iterate over a list in chunks? 的石斑鱼食谱,但无法让它发挥作用。
【问题讨论】:
-
"cannot get it to work" - 您具体尝试了什么,出了什么问题?给minimal reproducible example。请注意,您通常应该调用
next(thing),而不是thing.__next__()。
标签: python iterator next pysam