XORing long strings opimization?

Noen not.available at na.no
Tue Nov 4 17:30:46 EST 2003


Tim Peters wrote:

> [Noen]
> 
>>...
>>	# Xoring
>>	for c1 in s1:
>>		for c2 in s2:
>>			output += chr(ord(c1) ^ ord(c2))
>>	return output
>>
>>This way is very slow for large strings.
>>Anyone know of a better and faster way to do it?
> 
> 
> First do an ord() only once per character:
> 
>     ord1 = map(ord, s1)
>     ord2 = map(ord, s2)
> 
> Now loop over that and accumulate the individual results in a list:
> 
>     alist = [chr(x ^ y) for x in ord1 for y in ord2]
> 
> Now paste those all together:
> 
>     return ''.join(alist)
> 
> The major inefficiency in the original is that "output += ..." copies all of
> output each time it's executed (strings in Python are immutable -- you
> cannot append to a Python string in-place).
> 
> 
  alist = [chr(x ^ y) for x in ord1 for y in ord2]

This creates a way too big list... Im not familiar with two for loops in 
one, so I cant see whats wrong :(





More information about the Python-list mailing list