当前位置: 首页 > 面试题库 >

Python-具有大写字母和数字的随机字符串生成

潘翊歌
2023-03-14
问题内容

我想生成一个大小为N的字符串。

它应该由数字和大写英文字母组成,例如:

  • 6U1S75
  • 4Z4UKK
  • U911K4

问题答案:

一行回答:

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

甚至更短,从Python 3.6开始,使用random.choices()

''.join(random.choices(string.ascii_uppercase + string.digits, k=N))

加密更安全的版本;参见https://stackoverflow.com/a/23728630/2213647

''.join(random.SystemRandom().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没有在内存中创建列表,但生成的飞行元素,一个接一个(更多相关信息点击这里)。

elem我们将要求Python创建一个从字符序列中选取的随机字符,而不是创建字符串’n’次:

>>> random.choice("abcde")
'a'
>>> random.choice("abcde")
'd'
>>> random.choice("abcde")
'b'

因此,random.choice(chars) for _ in range(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'


 类似资料:
  • rank ▲ ✰ vote url 63 367 163 862 url 生成包含大写字母和数字的随机字符串 我希望生成N大小的字符串. 里面只含有数字和大写字母,比如: 6U1S75 4Z4UKK U911K4 有没有什么Pythonic的方法? 一行写的答案: ''.join(random.choice(string.ascii_uppercase + string.digits) for _

  • 本文向大家介绍如何在Python中生成带有大写字母和数字的随机字符串?,包括了如何在Python中生成带有大写字母和数字的随机字符串?的使用技巧和注意事项,需要的朋友参考一下 您可以使用random.choice(list_of_choices)获取随机字符。然后循环遍历并获取列表,最后加入该列表以获取字符串。这里的选择列表是大写字母和数字。例如: 这将给我们输出: 这也可以在一行中完成: 在Py

  • 问题内容: 如何生成(伪)随机字母数字字符串,例如:PHP中的“ d79jd8c”? 问题答案: 首先用所有可能的字符组成一个字符串: 您还可以使用range()更快地完成此操作。 然后,在一个循环中,选择一个随机数并将其用作字符串的索引以获取随机字符,然后将其附加到您的字符串中: 是随机字符串的长度。

  • 问题内容: 如何在Swift中生成随机的字母数字字符串? 问题答案: Swift 4.2更新 Swift 4.2在处理随机值和元素方面引入了重大改进。您可以在此处阅读有关这些改进的更多信息。这是减少到几行的方法: Swift 3.0更新 原始答案:

  • 本文向大家介绍js随机生成字母数字组合的字符串 随机动画数字,包括了js随机生成字母数字组合的字符串 随机动画数字的使用技巧和注意事项,需要的朋友参考一下 js随机动画生成一组随机数字 在线预览 点击下载 效果描述: 附件中只有一个index.html文件有效 其中包含css以及html两部分内容 纯js生成的几个随机数字 每次都不重复,点击按钮后再次切换 使用方法: 1、将css样式引入到你的网

  • 问题内容: 我一直在寻找一种简单的 Java算法来生成伪随机的字母数字字符串。在我的情况下,它将用作唯一的会话/密钥标识符,在整个世代中“可能”是唯一的(我的需求实际上不需要任何更复杂的东西)。 理想情况下,我可以根据自己的独特性要求指定长度。例如,生成的长度为12的字符串可能看起来像。 问题答案: 算法 要生成随机字符串,请连接从可接受的符号集中随机抽取的字符,直到字符串达到所需的长度。 实作