我正在使用这行代码生成一个随机的整数列表:
random.sample(range(2000), 100)
使用此代码,我知道我的结果不会有双重值。他们可能是获得相同结果的更快方法吗?
现在我实际上必须将这些int转换为字符串。什么是最快的方式?
由于
答案 0 :(得分:2)
使用xrange
代替range
:
lst = random.sample(xrange(10**9), 100)
转换为字符串列表:
strings = map(str, lst)
作为一个字符串:
s = ''.join(strings)
答案 1 :(得分:1)
random.sample选择列表中的整数而不用替换。如果你试图避免重复,那么你正在做的是正确的方法。你的数字会变大吗?您需要在Python 2中使用Python 3或xrange,以避免生成该范围内的整个整数列表。
(感谢J.F. Sebastian指出如果使用xrange,random.sample不必生成所有整数。)
如果你想允许重复,你可以使用randrange:
randomInts = [random.randrange(2000) for _ in range(100)]
转换为字符串:
randomStrings = [str(x) for x in randomInts]
答案 2 :(得分:0)
import random
r = random.sample(range(2000), 100)
# One way to convert them to strings:
s = [str(x) for x in r]
答案 3 :(得分:0)
如果你要生成大量的随机数列表,你可以预先生成字符串以加速查找,就像这样。
stringcache = dict((val, str(val)) for val in range(2000))
while some_condition:
r_strings = map(stringcache.get, random.sample(range(2000), 100))