gpt4 book ai didi

loops - 如何使用两个迭代器进行迭代

转载 作者:行者123 更新时间:2023-12-04 01:13:27 24 4
gpt4 key购买 nike

我想使用 nimbioseq 并迭代两个具有相同序列数的文件(使用 readSeq()iterator),如:

for seq1, seq2 in readSeq(file1), readSeq(file2):
echo seq1.id, "\t", seq2.id

对于这种情况,我想我需要某种“压缩”运算符,但我不明白如何使用它[发现:https://hookrace.net/nim-iterutils/iterutils.html#zip.i ,,可迭代[S] ].

或者了解如何在 for 循环之外获得单个“迭代”(如果可能):

for seq1 in readSeq(file1):
let seq2 = readSeq(file2);
echo seq1.id, "\t", seq2.id

谢谢你的帮助!

最佳答案

来自 iterutils 的

toClosure 是有限的,但您可以:

import iterutils

template initClosure(id,iter:untyped) =
let id = iterator():auto{.closure.} =
for x in iter:
yield x

initClosure(f1,readSeq(file1))
#creates a new closure iterator, 'f1'

initClosure(f2,readSeq(file2))
#creates a new closure iterator, 'f2'

for seq1,seq2 in zip(f1,f2):
echo seq1.id,"\t",seq2.id

编辑:感谢@pietropeter 指出了错误,这是他们使用此模板重写的示例:

import iterutils
template initClosure(id:untyped,iter:untyped) =
let id = iterator():auto {.closure.} =
for x in iter:
yield x

iterator letters: auto =
for c in 'a' .. 'z':
yield c

# Now requires a parameter
iterator numbers(s: int): int =
var n = s
while true:
yield n
inc n

initClosure(cletter,letters())
initClosure(numbers8,numbers(8))

for (c, n) in zip(cletter, numbers8):
echo c, n

关于loops - 如何使用两个迭代器进行迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64077777/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com