[英]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.