python随机生成英文字符串_如何用Python语言生成随机字符串 | 学步园

这是在Stackoverflow的关于 “用Python语言简洁地生成随机字符串” 的经典问答。

将此文翻译并分享下。

我想生成一个长度为N的字符串。

这个字符串应由数字和大写英文字母组成,如下:

•6U1S75

•4Z4UKK

•U911K4

我怎样用Phyton语言实现这项功能?

用一行语句解决此问题:

''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(N))

为了循环使用,为其添加一个简单的函数,具体如下:

>>> import string

>>> import random

>>> def id_generator(size=6, chars=string.ascii_uppercase + string.digits):

... return ''.join(random.choice(chars) for _ in range(size))

...

>>> id_generator()

'G5G74W'

>>> id_generator(3, "6793YUIO")

'Y3U'

是怎样实现此功能的?

我们导入string,这个模块包含通用ASCII码的字符序列;导入random,这个模块用来随机生成字符串。

string.ascii_uppercase + string.digits只是将ASCII大写字符和数字连接到列表中。

>>> string.ascii_uppercase

'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

>>> string.digits

'0123456789'

>>> string.ascii_uppercase + string.digits

'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'

然后我们可以用列表解析来创建一个包含'n'个元素的列表:

>>> range(4) # range create a list of 'n' numbers

[0, 1, 2, 3]

>>> ['elem' for _ in range(4)] # we use range to create 4 times 'elem'

['elem', 'elem', 'elem', 'elem']

在上面这个例子里,我们用[来创建列表,但我们没有在id_generator函数中创建列表,所以Python并没有在内存中创建列表,但Python一个接一个很快地创建了这些元素(更多信息,

我们并不去创建n次elem字符串,而是由Python从字符序列中选取并创建n次随机字符:

>>> random.choice("abcde")

'a'

>>> random.choice("abcde")

'd'

>>> random.choice("abcde")

'b'

因此,random.choice(chars) for _ inrange(size)的确在创建一个长度为size的字符序列。字符从chars随机选取:

>>> [random.choice('abcde') for _ in range(3)]

['a', 'b', 'b']

>>> [random.choice('abcde') for _ in range(3)]

['e', 'b', 'e']

>>> [random.choice('abcde') for _ in range(3)]

['d', 'a', 'c']

最后我们将这些都加入到一个空字符串中,这样字符序列就变成了字符串:

>>> ''.join(['a', 'b', 'b'])

'abb'

>>> [random.choice('abcde') for _ in range(3)]

['d', 'c', 'b']

>>> ''.join(random.choice('abcde') for _ in range(3))

'dac'

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值