我想对一个字符串的每个位置进行循环,如何符合返回true,不符合返回false
function convert(y,string)
if length(string) > y+1
s=string[y+1:y+2]
if s=="CG"
return true
else
return false
end
end
end
start_cpgs=[0,3,6,12,22]
sequence="CGTTGGTGTAGGTGTAGAGAGGTGTTTTGTGTTGGTGTAGGTGTAG"
map(convert,start_cpgs,sequence)
可是我的结果都是nothing,如下图所示,怎么返回true 或false呢?
是map比for要快么?

谢谢各位大佬帮忙
map
和向量化对字符串的作用规则不一样。前者把字符串拆成列表,后者当成标量。
使用对比
f(i,j) = (i,j)
map(f, [1, 2, 3], "abc") # (1, a) (2, b) (3, c)
f.([1, 2, 3], "abc") # (1, abc), (2, abc), (3, abc)
按这里意思应该用向量化而不是 map。
convert 这个写法也有点奇怪
- 判断为否时,将返回nothing,返回类型不稳定
- 这个 if else 不如直接写
return s == 'CG'
对于return true或者false,我在这的意思是想直接变成2进制的节省一下空间
要不试试点语法

当里面只有一个Vector
,或者多个长度相同的Vector
时,点语法可以直接用。
还有人家的建议是,代码改成:
julia> function convert(y,string)
if length(string) > y+1
s=string[y+1:y+2]
return s=="CG" # 这里的值正巧就是true/false
end
end
julia> .+([1,2,3,4], 5)
4-element Vector{Int64}:
6
7
8
9
julia> .+([1,2,3,4], [3,4,5,6])
4-element Vector{Int64}:
4
6
8
10
点语法就类似这种,只不过,自己写的函数,需要再函数名后面加点.
;加减乘除是在前面加点。
只要矢量长度别长短不一,对任何函数都适用哦
如果仅仅是为了找到有没有,或者有多少之类的,可以试试正则匹配,应该会更高效