如何使用Julia替换字符串中的多个字符

Sys*_*tem 6 string replace julia

我基本上试图解决这个问题:http://rosalind.info/problems/revc/

我想用他们的恭维T,G,C,A替换所有出现的A,C,G,T.换句话说,所有的A将被替换为T,所有的C都被G替换为等等.

我之前使用过该replace()函数来替换所有出现的'T'和'U',并希望替换函数将一个字符列表替换为另一个字符列表但我无法使其工作,所以它可能没有那个功能.

我知道我可以使用BioJulia软件包轻松解决这个问题,并使用以下方法完成:

# creating complementary strand of DNA
# reverse the string
# find the complementary nucleotide
using Bio.Seq
s = dna"AAAACCCGGT"

t = reverse(complement(s))

println("$t")
Run Code Online (Sandbox Code Playgroud)

但我不想依赖包裹.

这是我到目前为止的代码,如果有人可以引导我朝着正确的方向发展,那将是伟大的.

# creating complementary strand of DNA
# reverse the string
# find the complementary nucleotide

s = open("nt.txt") # open file containing sequence

t = reverse(s) # reverse the sequence

final = replace(t, r'[ACGT]', '[TGCA]') # this is probably incorrect
# replace characters ACGT with TGCA

println("$final")
Run Code Online (Sandbox Code Playgroud)

Ale*_*ley 5

似乎replace还没有像trBash 那样完成翻译.所以相反,这里有几种使用字典映射的方法(BioJulia包似乎也使用了类似的字典):

compliments = Dict('A' => 'T', 'C' => 'G', 'G' => 'C', 'T' => 'A')
Run Code Online (Sandbox Code Playgroud)

然后,如果str = "AAAACCCGGT",你可以join像这样使用:

julia> join([compliments[c] for c in str])
"TTTTGGGCCA"
Run Code Online (Sandbox Code Playgroud)

另一种方法可能是使用函数和map:

function translate(c)
    compliments[c]
end
Run Code Online (Sandbox Code Playgroud)

然后:

julia> map(translate, str)
"TTTTGGGCCA"
Run Code Online (Sandbox Code Playgroud)

字符串是Julia中的可迭代对象; 这些方法中的每一个依次读取一个字符c,并将其传递给字典以获取补充字符.一个新的字符串是从这些免费的人物建立起来了.

Julia的字符串也是不可变的:你不能在原地交换字符,而是需要构建一个新的字符串.

  • @ajcr我不这么认为,你可能想看一下[`MutableStrings.jl`](https://github.com/tanmaykm/MutableStrings.jl)和[`Strings.jl`](https: //github.com/quinnj/Strings.jl)这是一个惯用的方法!:d (2认同)