在Python中使用三个不同长度的字母生成随机字符串

问题描述 投票:-2回答:5

如何生成一个包含三个整数A,B和C的随机字符串,其中包含A字母'a',B字母'b'和C字母'c'?

def generate_string(A, B, C):
    // return a string

s = generate_string(2, 5, 1)
// outputs can be
aabbbbbc 
ababbbcb
abcabbbb
and so on....

但是,我能够使用python random.choice()函数实现这种功能。

>>> print(''.join(choice('a'+'b'+'c') for i in range(5)))
aacaa
python string python-3.x random
5个回答
0
投票

复杂性是O(a + b + c),但这将起作用:

from random import shuffle

a = 3
b = 4
c = 5
letters = []

for i in range(a):
  letters.append('a')
for i in range(b):
  letters.append('b')
for i in range(c):
  letters.append('c')

shuffle(letters)
print(''.join(letters))

0
投票

试试这个:

from random import choice

options = {'a': 2, 'b': 5, 'c': 1}
gen_chars = []
while options:
    genc = choice(''.join(options.keys()))
    options[genc] -= 1
    if options[genc] == 0:
        options.pop(genc)
    gen_chars.append(genc)

print(''.join(gen_chars))

0
投票

一种方法是创建一个包含这些字符的字符串,然后从该字符串中输入sample来对其进行洗牌:

from random import sample

s = 'a'*2 + 'b'*5 + 'c'*1

print(''.join(sample(s, k=len(s))))

根据您的评论,函数可能看起来像

from itertools import repeat, chain
from random import shuffle

def generate_string(*pairs):
    chars = list(chain.from_iterable(repeat(c, n) for n, c in pairs))
    shuffle(chars)
    return ''.join(chars)

print(generate_string((2, 'a'), (5, 'b'), (1, 'c')))

如果您只担心这3个字符,可以简化为

def generate_string(a, b, c):
    s = 'a'*a + 'b'*b + 'c'*c
    return ''.join(sample(s, k=len(s)))

0
投票

功能:

def generate_string(A,B,C):
    from random import sample as sp
    return "".join(sp(("a"*A)+("b"*B)+("c"*C),A+B+C))

使用:

>>> generate_string(2,3,1)
'baacbb'
>>> generate_string(2,3,1)
'bcbaba'
>>> generate_string(5,1,1)
'baaacaa'
>>> generate_string(2,5,1)
'cbababbb'
>>> 

0
投票

您必须检查int的变量A,B和C:

 import random
 def generate_string(A, B, C):
     _list = list("a"*A + "b"*B + "c"*C)
     random.shuffle( _list)
     return "".join(_list)
© www.soinside.com 2019 - 2024. All rights reserved.