How smart is the Python interpreter?

Gary Herron gherron at islandtraining.com
Thu Jul 31 18:16:16 CEST 2008


ssecorp wrote:
> def str_sort(string):
> 	s = ""
> 	for a in sorted(string):
> 		s+=a
> 	return s
>
>
> if i instead do:
>
> def str_sort(string):
> 	s = ""
>         so = sorted(string)
> 	for a in so:
> 		s+=a
> 	return s
>
>
> will that be faster or the interpreter can figure out that it only has
> to do sorted(string) once? or that kind of cleverness is usually
> reserved for compilers and not interpreters?
> --
> http://mail.python.org/mailman/listinfo/python-list
>   

The 'for' statement is only executed once of course.  It's the body of 
the 'for' which is executed multiple times.  So in both pieces of code, 
the 'sorted' is only executed once, and the returned string is bound to 
a name in the second but not the first.

However, you are worrying about optimizing the wrong things here.  The 
's+=a' line has terrible (quadratic) performance.  Instead use the 
string method 'join' which has linear performance.

def str_sort(string):
  return "".join(sorted(string))

No for loop, no inefficient accumulation.

Gary Herron





More information about the Python-list mailing list