Fast method to generate random string sequence
本问题已经有最佳答案,请猛点这里访问。
我有一个函数,它返回一个大小为
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | def gen_line(N): tline ="" for i in range(N): xrand = random.random() if( xrand < 0.25 ): ch ="A" elif( xrand < 0.50 ): ch ="B" elif( xrand < 0.75 ): ch ="C" elif( xrand < 1.00 ): ch ="D" else: print"ERROR: xrand = %f"%( xrand ) tline = tline+ch return tline |
但毫无疑问,这是一种效率很低的做事方式。有没有更好的,更多的Python,实现这一点的方法?
尝试使用
1 2 3 | >>> x = 'abcd' >>> ''.join(random.choice(x) for _ in range(10)) 'aabbdbadbc' |
您可以使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | In [13]: import random a = np.array(list('abcd')) %timeit ''.join(np.random.choice(a, 10000)) ? def gen_line(N): tline ="" for i in range(N): xrand = random.random() if( xrand < 0.25 ): ch ="A" elif( xrand < 0.50 ): ch ="B" elif( xrand < 0.75 ): ch ="C" elif( xrand < 1.00 ): ch ="D" else: print("ERROR: xrand = %f"%( xrand )) tline = tline+ch return tline ? %timeit gen_line(10000) 100 loops, best of 3: 6.39 ms per loop 100 loops, best of 3: 11.7 ms per loop |