Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中使用索引更快地替换字符_Python_String - Fatal编程技术网

在python中使用索引更快地替换字符

在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) 有没有一种更快的方法可以操作字符串,而不必先转

我有一大套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):
     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万氨基酸这样的大型数据集,计算复杂性可能会产生重大影响,即使有运行时开销的影响,还有垃圾收集。