在Python中生成具有三个不同长度字母的随机字符串
如何生成一个包含三个整数a、B和C的随机字符串,其中正好包含字母“a”、B字母“B”和C字母“C”在Python中生成具有三个不同长度字母的随机字符串,python,string,python-3.x,random,Python,String,Python 3.x,Random,如何生成一个包含三个整数a、B和C的随机字符串,其中正好包含字母“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.... 但是,我能够使用pythonrandom.choice()函数实现此类功能 >>> print
def generate_string(A, B, C):
// return a string
s = generate_string(2, 5, 1)
// outputs can be
aabbbbbc
ababbbcb
abcabbbb
and so on....
但是,我能够使用pythonrandom.choice()函数实现此类功能
>>> print(''.join(choice('a'+'b'+'c') for i in range(5)))
aacaa
一种方法是生成一个包含这些字符的字符串,然后从该字符串中洗牌:
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)))
复杂性是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))
试试这个:
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))
您必须检查变量A、B和C的int值:
import random
def generate_string(A, B, C):
_list = list("a"*A + "b"*B + "c"*C)
random.shuffle( _list)
return "".join(_list)
功能:
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'
>>>
但这并不能保证在每个生成的字符串中都会有2个a、5个b和1个c,你所做的与我想要实现的相反。假设有一个函数以三个整数(字符长度)作为输入,并根据这些长度生成一个字符串
def generate_string(length_a,length_b,length_c)://返回字符串
s=generate_string(2,5,1)//输出aabbbc abbbbc abcabbb
@DeepSpace是吗<代码>样本选择而不替换,因此我们不能得到比人口更多的东西。很好,现在你需要从所有答案中选择一个更符合你需要的答案。你的问题是什么?@BlackThunder我编辑了我的问题。