[Tutor] Replace a character by index
cwitts at compuscan.co.za
Thu Jul 16 11:06:52 CEST 2009
> My question is more about style/timing than anything else.
> In my program I'm taking a word and generating "blanks" in that word.
> For example, the word cat could generate:
> I have two different ways I can put _ in the word:
> word = 'cat'
> ''.join(list(word) = '_')
> # I'm not using a constant, but randomly generating where the blank
> word[:1] + '_' + word[1+1:]
> So, when I use the timeit module I get these results:
> In : timeit.Timer("''.join(list('foo'))").timeit()
> Out: 2.9940109252929688
> In : timeit.Timer("'foo'[:2]+'_'+'foo'[2+1:]").timeit()
> Out: 0.63733291625976562
> Quite a significant difference.
> So my question(s): Which method should I use/is more pythonic? Which
> method do you/have you used? And the ubiquitous 'Why?'
> Normally I would lean towards the first method because reassigning a
> value in a list seems more natural than string concatenation. In this
> particular application I'm not exactly worried about performance - on
> even an archaic computer I don't think one would notice.
> TIA for your input,
> To be considered stupid and to be told so is more painful than being
> called gluttonous, mendacious, violent, lascivious, lazy, cowardly:
> every weakness, every vice, has found its defenders, its rhetoric, its
> ennoblement and exaltation, but stupidity hasn’t. - Primo Levi
> Tutor maillist - Tutor at python.org
Strings are essentially a list already of characters. What would be
slowing down your preferred method #1 would be your explicit cast to a
list and then re-joining that list. Strings support item assignment so
you can save quite a few cycles just doing
word = 'cat'
word = '_'
which would result in word printing 'c_t'. I'm assuming your use case
would be just a call to random with bounds zero -> length of string - 1
and then using that index to replace the character with an underscore
and it is much simpler and faster to just use the strings build in index
and item assignment.
Hope that helps.
More information about the Tutor