Convert strings to floats in the range [0, 1), using a hash function
1 2 3 4 5 6 7 | def hashed_float(s):
"""returns a float in the range [0, 1) based on a hash of the string.
A given string will always return the same value, but different strings
will return very different values."""
import md5, struct
[number] = struct.unpack("<H", md5.new(s).digest()[:2])
return number / float(0xFFFF)
|
I use this for creating sample test suites where each test takes a different time to complete, using each test's name as the parameter.
Tags: algorithms
One could also use...
Or even bypass all modules entirely...
True, but... random()'s or hash()'s results are not reproducible in other languages, nor necessarily in different versions of Python where implemenatations may change. MD5, or any other standard hash function, does guarantee reproducible results.