4 回答

TA贡献1909条经验 获得超7个赞
random.choices您可以通过设置权重生成只有 2 个字符的随机字符串。如果你得到的ns 比你需要的多或少,丢弃并得到一个新的。下面我用递归函数做到了。
import random
def yn_gen(num_n=5, size=30):
candidate = random.choices('yn',
weights=((size-num_n)/size, num_n/size),
k=size)
if candidate.count('n')==num_n:
return ''.join(candidate)
else:
return yn_gen(num_n, size)
yn_gen()
# returns:
'yynnnnyyyyyyyyyyyyyyyyyyyynyyy'
yn_gen(10, 50)
# returns:
'yynynynnyyyyynyyyyyyynyynnyyyyyyyyyynyynyyyyyyyyyy'

TA贡献1809条经验 获得超8个赞
本质上,您需要选择n应放置 s 的预定义位置数量,并将其他所有内容设置为y:
def generate(length, ns):
result = ['y'] * length
for i in random.sample(range(length), ns):
result[i] = 'n'
return ''.join(result)

TA贡献1835条经验 获得超7个赞
Njk如果您知道最终字符串的大小和 N 的个数,您可以创建一个以N 和length - NjkY开头的列表。然后,打乱该列表并加入它。
from random import shuffle
final_size = 16
number_of_n = 3
# ['n', 'n', 'n', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y']
result = list('n' * number_of_n + 'y' * (final_size - number_of_n))
shuffle(result)
result = ''.join(result)
print(result)
这可以输出这样的字符串:
yyyyyyyyyyyyy
yyyyyyyyyyyyy
yyyyyyyyyyyy

TA贡献1827条经验 获得超8个赞
random 模块提供了一个名为的函数sample,可用于非常有效地生成随机模式
from random import sample
size = 33
count = 200
NjK = 7
yn = ["n"]*NjK + ["y"]*(size-NjK)
results = [ "".join(sample(yn,size)) for _ in range(count) ]
print(results[:3],"...",results[-3:])
这将使您能够非常快速地生成数千个长模式。
添加回答
举报