As pointed out, strings are immutable and depending on F(c) being mostly c or not, different approaches might work best.<p>Eg. for a single replacement (I haven't seen this one mentioned), slicing might work best: s[:i-1] + F(s[i]) + s[i+1:]. This is obviously good for a small number of replacements too, though you might want to switch to "".join(iterable) for better performance.<p>In general, immutability of strings requires a more functional approach than in-place editing.