python生成字母数字序列
我需要一个自定义字母数字序列,用于每个python生成字母数字序列,python,Python,我需要一个自定义字母数字序列,用于每个产品的django型号上的自定义\u id def save(self, *args, **kwargs): if self.custom_id is None: self.custom_id = f"{custom_seq(self.id)}" return super(Product, self).save(*args, **kwargs) 我希望自定义字母数字序列生成为: eg. letters=4
产品的django型号上的自定义\u id
def save(self, *args, **kwargs):
if self.custom_id is None:
self.custom_id = f"{custom_seq(self.id)}"
return super(Product, self).save(*args, **kwargs)
我希望自定义字母数字序列生成为:
eg. letters=4, digits=3 then,
'AAAA001', 'AAAA002', 'AAAA003'... 'ZZZZ999'
if letters =3 and digits =4
'AAA0001', 'AAA0002'... 'ZZZ9999'
以下是我的尝试:
def custom_seq(pk, letter=4, digits=3):
init = ''
alpha = string.ascii_uppercase
for i in alpha:
for j in alpha:
for k in alpha:
for l in alpha:
yield(i+j+k+l)
这将只将“AAAA”转换为“ZZZZ”,但不确定如何在前面添加数字并使其动态。您可以使用itertools.product轻松获得字母和数字的组合
import string
import itertools
def custom_seq(pk, letter=4, digits=3):
alpha = string.ascii_uppercase
digit = string.digits
alpha_list = [alpha]*letter
digit_list = [digit]*digits
for i in itertools.product(*alpha_list):
for j in itertools.product(*digit_list):
yield "".join(i + j)
# print("".join(i + j))
您可以使用itertools.product轻松获得字母和数字的组合
import string
import itertools
def custom_seq(pk, letter=4, digits=3):
alpha = string.ascii_uppercase
digit = string.digits
alpha_list = [alpha]*letter
digit_list = [digit]*digits
for i in itertools.product(*alpha_list):
for j in itertools.product(*digit_list):
yield "".join(i + j)
# print("".join(i + j))
你说的“让这充满活力”是什么意思?itertools
有一个函数,product
,它可能会有所帮助。@ScottHunter-谢谢,让我检查一下product
,动态方法-在我的代码中,你可能已经注意到我写了4个字母时的外观。这4个循环应该是动态的,因此如果我将字母
更改为其他数字
,那么循环的3或5应该更改该次数。当您将self.id
传递给custom_seq
时,您希望它做什么?似乎您希望自定义生成器生成AAA001
,但是,您想如何控制序列从何处开始?比如,您想控制第一个序列是AAA001
还是AAA999
?@fusion-请忽略,我计划用id本身来初始化,而不是用数字,但问题是它可能有任意数量的数字,如2位数字、3位数字等。这会改变我的序列长度。你可能正在寻找类似的东西吗?你说的“让这充满活力”是什么意思?itertools
有一个函数,product
,它可能会有所帮助。@ScottHunter-谢谢,让我检查一下product
,动态方法-在我的代码中,你可能已经注意到我写了4个字母时的外观。这4个循环应该是动态的,因此如果我将字母
更改为其他数字
,那么循环的3或5应该更改该次数。当您将self.id
传递给custom_seq
时,您希望它做什么?似乎您希望自定义生成器生成AAA001
,但是,您想如何控制序列从何处开始?比如,您想控制第一个序列是AAA001
还是AAA999
?@fusion-请忽略,我计划用id本身来初始化,而不是用数字,但问题是它可能有任意数量的数字,如2位数字、3位数字等。这会改变我的序列长度。你可能正在寻找类似的东西吗?