2009-12-12 20 views
0

我使用这行代码来生成一个整数的随机列表:Python的随机和INT串问题

random.sample(range(2000), 100) 

有了这个代码,我知道我不会有双重价值与我的结果。他们可能是更快的方式来实现相同的结果?

现在我实际上必须将这些int转换为字符串。什么是最快的方法来做到这一点?

感谢

回答

1

random.sample从列表中选择没有整数更换。如果你试图避免重复,那么你正在做的是正确的方法。你的号码可以变得更大吗?您需要使用Python 3或Python 2中的xrange来避免生成该范围中的整个整数列表。

(感谢JF塞巴斯蒂安用于指出random.sample没有,如果你使用的xrange产生的所有整数)。

如果你想使您可以使用randrange而不是重复:

randomInts = [random.randrange(2000) for _ in range(100)] 

要转换为字符串:

randomStrings = [str(x) for x in randomInts] 
+0

-1:随机' .sample()'不会生成en轮胎清单从中抽样。 'random.sample(xrange(10 ** 9),100)'和'random.sample(xrange(10 ** 3),100)'采取相同的时间。 – jfs 2009-12-12 16:57:51

+0

好的,谢谢你告诉我!我没有意识到它可以通过生成器进行优化,而不是实际生成元素。这让我想知道它是如何知道它将在未实际生成它们的情况下获得的数字。发电机可以返回任何他们想要的。它必须是一些特别处理xrange的特殊处理? – 2009-12-12 17:08:03

+1

最好只看'random.sample'的来源,但我认为它只使用'__len__'和'__getitem__'方法。 – jfs 2009-12-12 17:22:35

0
import random 
r = random.sample(range(2000), 100) 
# One way to convert them to strings: 
s = [str(x) for x in r] 
0

如果你会产生大量和很多随机数列表,你可以预先生成字符串来加速查找,就像这样。

stringcache = dict((val, str(val)) for val in range(2000)) 

while some_condition: 
    r_strings = map(stringcache.get, random.sample(range(2000), 100)) 
2

使用xrange而不是range

lst = random.sample(xrange(10**9), 100) 

要转换为字符串列表:

strings = map(str, lst) 

作为一个字符串:

s = ''.join(strings) 
+1

xrange在Python 3.0中不存在。 “NameError:name'xrange'未定义” – 2009-12-12 17:40:02

+3

@Mark:*标记为'python'的代码中的大部分*在Python 3.0上不起作用(由于'print'语句 - >'print()'函数的微小差别, 'xrange' - >'range'。除非*明确指出Python 3.x的要求,否则所有的代码应该被认为是Python 2.x – jfs 2009-12-12 17:57:15