我有一个函数,它返回一个大小为N
的字符串,其中包含一个随机字符序列,形成一个小集合{A,B,C,D}
。我生成这一行:
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
但毫无疑问,这是一种非常低效的做事方式。有没有更好,更pythonic的方法来实现这个目标?
答案 0 :(得分:2)
尝试将random.choice
与str.join
一起使用。
>>> x = 'abcd'
>>> ''.join(random.choice(x) for _ in range(10))
'aabbdbadbc'
答案 1 :(得分:0)
您可以使用np.random.choice
:
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