如何生成所有可能的k长度子序列,并迭代每个序列?

2026-04-01 20:121阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计416个文字,预计阅读时间需要2分钟。

如何生成所有可能的k长度子序列,并迭代每个序列?

我想在给定符号序列的情况下,生成每个可能的k长度字符串(称为k-mer)。例如,如果k=3且symbols={A,C,G,T},字符串:AAAAACAAG...TTGTTT,这是生成字符串的代码:

pythondef generate_kmers(sequence, k): kmers=set() for i in range(len(sequence) - k + 1): kmer=sequence[i:i+k] kmers.add(kmer) return kmers

sequence=AAAAACAAG...TTGTTTk=3symbols={'A', 'C', 'G', 'T'}kmers=generate_kmers(sequence, k)print(kmers)

我想在给定符号列表的情况下迭代每个可能的k长度字符串(称为k-mer).例如,如果k = 3且symbols = {A,C,G,T},则:

AAA AAC AAG ... TTG TTT

这是我生成字符串的代码:

local k = 3 local bases = {'A', 'C', 'T', 'G'} -- Generate the string (AAA...AAA) local kmer_gen = {} for i = 1,k do kmer_gen[i] = "A" end local kmer = table.concat(kmer_gen)

它有效,但肯定不好看.这可以更优雅地实现吗?

现在,我不知道如何迭代可能的k-mers.一种解决方案是保持替换每个字符,但这看不到有效.另一种方法是从二进制解码(每2位代表一个基数),但实现混乱并需要按位操作.还有其他想法吗?

如何生成所有可能的k长度子序列,并迭代每个序列?

这是一个使用迭代器的解决方案.这是协同程序的一个很好的例子,这是一种值得在Lua中了解的技术.另见 www.lua.org/pil/9.3.html.

local bases = {'A', 'C', 'T', 'G'} local function allstrings(n,t,k,s) k=k or 1 s=s or {} if k>n then coroutine.yield(table.concat(s)) else for i=1,#t do s[k]=t[i] allstrings(n,t,k+1,s) end end end local function kmer(n,t) return coroutine.wrap(allstrings),n,t end for w in kmer(3,bases) do print(w) end

本文共计416个文字,预计阅读时间需要2分钟。

如何生成所有可能的k长度子序列,并迭代每个序列?

我想在给定符号序列的情况下,生成每个可能的k长度字符串(称为k-mer)。例如,如果k=3且symbols={A,C,G,T},字符串:AAAAACAAG...TTGTTT,这是生成字符串的代码:

pythondef generate_kmers(sequence, k): kmers=set() for i in range(len(sequence) - k + 1): kmer=sequence[i:i+k] kmers.add(kmer) return kmers

sequence=AAAAACAAG...TTGTTTk=3symbols={'A', 'C', 'G', 'T'}kmers=generate_kmers(sequence, k)print(kmers)

我想在给定符号列表的情况下迭代每个可能的k长度字符串(称为k-mer).例如,如果k = 3且symbols = {A,C,G,T},则:

AAA AAC AAG ... TTG TTT

这是我生成字符串的代码:

local k = 3 local bases = {'A', 'C', 'T', 'G'} -- Generate the string (AAA...AAA) local kmer_gen = {} for i = 1,k do kmer_gen[i] = "A" end local kmer = table.concat(kmer_gen)

它有效,但肯定不好看.这可以更优雅地实现吗?

现在,我不知道如何迭代可能的k-mers.一种解决方案是保持替换每个字符,但这看不到有效.另一种方法是从二进制解码(每2位代表一个基数),但实现混乱并需要按位操作.还有其他想法吗?

如何生成所有可能的k长度子序列,并迭代每个序列?

这是一个使用迭代器的解决方案.这是协同程序的一个很好的例子,这是一种值得在Lua中了解的技术.另见 www.lua.org/pil/9.3.html.

local bases = {'A', 'C', 'T', 'G'} local function allstrings(n,t,k,s) k=k or 1 s=s or {} if k>n then coroutine.yield(table.concat(s)) else for i=1,#t do s[k]=t[i] allstrings(n,t,k+1,s) end end end local function kmer(n,t) return coroutine.wrap(allstrings),n,t end for w in kmer(3,bases) do print(w) end