关于python:生成随机字符串序列的快速方法

Fast method to generate random string sequence

本问题已经有最佳答案,请猛点这里访问。

我有一个函数,它返回一个大小为N的字符串,其中包含一个小集合{A,B,C,D}的随机字符序列。我将此行生成为:

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,实现这一点的方法?


尝试使用random.choicestr.join

1
2
3
>>> x = 'abcd'
>>> ''.join(random.choice(x) for _ in range(10))
'aabbdbadbc'


您可以使用np.random.choice

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