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