我需要生成一个具有固定长度的随机字母数字字符串的列表。它会是这样的:list = ['ag5','5b9','c85']
,我可以用随机数来生成列表,但是我无法计算出字符串,它同时包含数字,letters.The列表将有固定的长度(比如100项)。我正在使用python 3。
发布于 2015-12-27 21:31:56
要获得一组字母数字字符,可以从string
模块中组合常量。然后,可以在列表理解中使用random.choice()
生成列表:
from random import choice
from string import ascii_lowercase, digits
chars = ascii_lowercase + digits
lst = [''.join(choice(chars) for _ in range(2)) for _ in range(100)]
print(lst)
发布于 2015-12-27 22:18:51
因为你需要每一个字符串都有一个字母和一个数字,所以我们需要比平时做更多的工作。我们既可以继续生成随机词,只接受满足约束条件的词,也可以通过构造构建满足约束条件的字符集合。
from random import choice, shuffle
from string import digits, ascii_lowercase
def gen_word(N, min_N_digits, min_N_lower):
choose_from = [digits]*min_N_dig + [ascii_lowercase]*min_N_low
choose_from.extend([digits + ascii_lowercase] * (N-min_N_low-min_N_dig))
chars = [choice(bet) for bet in choose_from]
shuffle(chars)
return ''.join(chars)
def gen_word_rejection(N, min_N_digits, min_N_lower):
bet = digits + ascii_lowercase
while True:
word = ''.join([choice(bet) for i in range(N)])
if (sum(c.isdigit() for c in word) >= min_N_digits and
sum(c.islower() for c in word) >= min_N_lower):
return word
这给了我
>>> [gen_word(3, 1, 1) for i in range(5)]
['mb6', 'g4b', 'y5g', '28p', 'ki2']
>>> [gen_word_rejection(3, 1, 1) for i in range(5)]
['y37', 'dr0', 'w1z', 'h2a', 'i6r']
所有这些都至少有一个数字和至少一个小写字母。
发布于 2015-12-27 21:32:10
如果您想要的话,我会推荐最小长度为3的hashids
和定制的盐类:
codes = [hasher.encode(i) for i in range(100)] # assuming hasher = hashids.Hashids('', 3)
https://stackoverflow.com/questions/34484972
复制相似问题