Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python生成字母数字序列_Python - Fatal编程技术网

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位数字等。这会改变我的序列长度。你可能正在寻找类似的东西吗?