在python中使用索引更快地替换字符
我有一大套150万的DNA序列 每个都有来自ATCG集合的大约1k个字符 我正在模拟错误突变,这需要很多时间才能完成。我已经确定了我的瓶颈,即更改字符串字符的函数:在python中使用索引更快地替换字符,python,string,Python,String,我有一大套150万的DNA序列 每个都有来自ATCG集合的大约1k个字符 我正在模拟错误突变,这需要很多时间才能完成。我已经确定了我的瓶颈,即更改字符串字符的函数: def f(sequence, indexes_to_mutate): seq = list(sequence) for i in indexes_to_mutate: seq[i] = 'X' return ''.join(seq) 有没有一种更快的方法可以操作字符串,而不必先转
def f(sequence, indexes_to_mutate):
seq = list(sequence)
for i in indexes_to_mutate:
seq[i] = 'X'
return ''.join(seq)
有没有一种更快的方法可以操作字符串,而不必先转换为列表,然后再转换回字符串。根据答案,以下方法将比转换为列表,然后再转换回字符串更快:
def f(sequence, indexes_to_mutate):
for i in indexes_to_mutate:
new_seq = sequence[:i] + 'X' + sequence[i+1:]
return new_seq
根据答案,以下方法比转换为列表并返回更快:
def f(sequence, indexes_to_mutate):
for i in indexes_to_mutate:
new_seq = sequence[:i] + 'X' + sequence[i+1:]
return new_seq
这甚至比OP的方法效率更低,因为每次编辑都要创建整个字符串的副本(减去一个字符),而不是一开始就创建一次;如果字符串的很大一部分正在改变,我同意这是效率较低的,但如果只有几个突变点,我认为更多的拷贝将是C中的快速字节拷贝。@SamHartman对于150万氨基酸这样的大型数据集,计算复杂性可能会产生重大影响,即使有运行时开销的影响,还有垃圾收集。这甚至比OP的方法效率更低,因为每次编辑都要创建整个字符串(减去一个字符)的副本,而不是一开始就创建一次。我认为这取决于有多少索引变异;如果字符串的很大一部分正在改变,我同意这是效率较低的,但如果只有几个突变点,我认为更多的拷贝将是C中的快速字节拷贝。@SamHartman对于150万氨基酸这样的大型数据集,计算复杂性可能会产生重大影响,即使有运行时开销的影响,还有垃圾收集。