On May 5, 11:02 pm, dave <[EMAIL PROTECTED]> wrote:
> On 2008-05-04 01:10:40 -0600, Arnaud Delobelle <[EMAIL PROTECTED]> said:
>
>
>
> > dave <[EMAIL PROTECTED]> writes:
>
> >> Hello,
>
> >> I made a function that takes a word list (one word per line, text
> >> file) and searches for all the words in the list that are 'shifts' of
> >> eachother. 'abc' shifted 1 is 'bcd'
>
> >> Please take a look and tell me if this is a viable solution.
>
> >> def shift(word, amt):
> >> ans = ''
> >> for letter in word:
> >> ans = ans + chr((ord(letter) - ord('a') + amt) % 26 +
> >> ord('a'))
> >> return ans
>
> > In Python, if you want to build a string from lots of parts you can
> > use ''.join(parts). I think it is considered more efficient.
>
> what would be the best way to write a "ans = ans + chr" into a
> ''.join(parts) ??
Well if you do it once, that would be simply "ans += chr". Arnaud was
referring to the case where you do it in a loop, like in your snippet.
A direct translation to use ''.join would be:
ans = ''.join(chr((ord(letter) - ord('a') + amt) % 26 + ord('a'))
for letter in word)
Of course it is simpler and more efficient if you factor out of the
loop the subexpressions that don't need to be recomputed:
ord_a = ord('a')
shift = ord_a - amt
ans = ''.join(chr((ord(letter) - shift) % 26 + ord_a)
for letter in word)
George
--
http://mail.python.org/mailman/listinfo/python-list