如何生成具有可变长度的随机字符串

Posted

技术标签:

【中文标题】如何生成具有可变长度的随机字符串【英文标题】:How to generate random strings that have variable length [duplicate] 【发布时间】:2016-12-21 23:13:14 【问题描述】:

我想知道如何在 Python 中打印随机字符串。 我希望这是一个像“ayhbygb”这样的随机字符串,并且是随机数量的字母长。比如,一次它可以打印“a”,下一次它可以打印“aiubfiub”或“aiuhiu”等。

谁能告诉我这是怎么做的?

【问题讨论】:

这不是它被标记为重复的问题的重复。 Hugh Chalmers 要求可变长度,而回答的问题是固定大小的字符串。 【参考方案1】:

您可以这样做,但是,您必须指定字符串的最大长度。您也可以随时为max_length 生成一个随机数。

import random, string

def random_string(length):
   return ''.join(random.choice(string.lowercase) for i in range(length))

max_length = 5
print(random_string(rando‌​m.randint(1, max_length)))

这里有 5 个测试用例:

print(random_string(random.randint(1, max_length)))
print(random_string(random.randint(1, max_length)))
print(random_string(random.randint(1, max_length)))
print(random_string(random.randint(1, max_length)))
print(random_string(random.randint(1, max_length)))

他们的输出是:

wl
crhxl
uvl
ty
iuydl

您当然可以通过将max_length 变量更改为您想要的任何值来更改字符串的最大长度。

【讨论】:

并使用random_string(random.randint(1, max_length))调用它 在 Python 3 中你需要使用string.ascii_lowercase【参考方案2】:

可变字符串,可变长度:

>>>import random, string    
>>>max_rand_str_length = 10
>>> def genCustomString():
...    return ''.join(random.choice(string.lowercase) for _ in range(random.choice(range(1, max_rand_str_length))))
... 
>>> genCustomString()
'v'
>>> genCustomString()
'mkmylzc'
>>> genCustomString()
'azp'
>>> genCustomString()

【讨论】:

@HughChalmersAdvanced 我已经更新了答案。 这应该是对哈里森答案的编辑,而不是单独的答案,因为它与他的基本相同。 @XanderLuciano OP 不必将长度传递给我的函数。 撇开这个答案与哈里森的答案几乎相同的事实不谈,使用全局变量会使它变得更丑陋。在这方面,另一个答案要干净得多。如果您不想传递值,请给参数一个默认值。【参考方案3】:

可能不是最优雅的,但这应该可以解决问题。如果你只想要小写,你可以用 string.ascii_lowercase 替换“string.ascii_letters”。

import random
import string

MIN_NUM_CHAR = 5
MAX_NUM_CHAR = 25
num_char = random.randint(MIN_NUM_CHAR, MAX_NUM_CHAR)

rand_string = ""
for i in range(num_char):
    rand_string += random.choice(string.ascii_letters)

print(rand_string)

【讨论】:

这不是均匀分布的。较小的字符串有更高的机会。

以上是关于如何生成具有可变长度的随机字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何删除具有可变长度的字符串的一部分

随机生成密码,长度6-10位、不可包含特殊字符、必须包含大写、小写和数字,oracle 如何实现?

sh 生成可变数字长度的随机数

在 Python 3 中生成具有随机长度的类随机唯一字符串的最快方法

如何自定义一个长度可变数组

通过 h5py (HDF5) 写入具有可变长度字符串的复合数据集