繁体   English   中英

用 python 中的字符串中的索引替换字符列表

[英]Replace a list of characters with indices in a string in python

我有一个坐标列表:

coordinates = [[1,5], [10,15], [25, 35]]

我有一个字符串如下:

line = 'ATCACGTGTGTGTACACGTACGTGTGNGTNGTTGAGTGKWSGTGAAAAAKCT'

我想将coordinates中成对指示的间隔替换为以字符'N'开头和结尾。

我能想到的唯一方法是:

for element in coordinates:
    length = element[1] - element[0]
    line = line.replace(line[element[0]:element[1]], 'N'*length)

所需的 output 将是:

line = 'ANNNNGTGTGNNNNNACGTACGTGTNNNNNNNNNNGTGKWSGTGAAAAAKCT'

其中区间 [1,5), [10,15) 和 [25, 35) 在line中被N替换。

这需要我每次都遍历坐标列表并更新我的字符串。 我想知道是否有另一种方法可以替换字符串中的间隔列表?

注意:这个问题的原始解决方案有问题。 line.replace(line[element[0]:element[1]], 'N'*length)中, replace将替换与line[element[0]:element[1]]中相同的所有其他字符串实例从序列来看,对于使用 DNA 的人来说,这绝对不是你想要的,但是我。 保持解决方案不变,以免干扰后续评论和讨论的流程。

而不是字符串连接(由于创建/销毁字符串实例而造成浪费),使用列表:

coordinates = [[1,5], [10,15], [25, 35]] # sorted

line = 'ATCACGTGTGTGTACACGTACGTGTGNGTNGTTGAGTGKWSGTGAAAAAKCT'

result = list(line)
# opted for exclusive end pos
for r in [range(start,end) for start,end in coordinates]:
    for p in r:
        result[p]='N'

res = ''.join(result)
print(res)

要得到:

ANNNNGTGTGNNNNNACGTACGTGTNNNNNNNNNNGTGKWSGTGAAAAAKCT

优化以使用切片和独占end

for start,end in coordinates:
    result[start:end] = ["N"]*(end-start)

res = ''.join(result)
print(line)
print(res)

给你你想要的 output:

ATCACGTGTGTGTACACGTACGTGTGNGTNGTTGAGTGKWSGTGAAAAAKCT 
ANNNNGTGTGNNNNNACGTACGTGTNNNNNNNNNNGTGKWSGTGAAAAAKCT

好问题,这应该有效。

coordinates = [[1,5], [10,15], [25, 35]]
line = 'ATCACGTGTGTGTACACGTACGTGTGNGTNGTTGAGTGKWSGTGAAAAAKCT'
for L,R in coordinates:
    line = line[:L] + "N"*(R-L) + line[R:]
print(line)

您可能需要根据坐标的定义方式进行调整,例如。 包含/1 索引。

我们需要更多的人从事 DNA 工作,所以工作很棒。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM