我有一个需要唯一5个字符ID的表格。我有一个生成该唯一ID的函数。在将其输入表单之前,我想将其与现有ID列表进行比较。如果生成的ID在列表中不存在,则将其传递给变量;否则,将其传递给变量。如果它确实存在并且不是唯一的,则生成另一个ID。最好的方法是什么?
def generate_id():
random_id= ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(5))
return random_id
existing_ids = ['AAAAA', 'BBBBB', 'CCCCC']
for id in existing_ids:
if not generate_id() == id:
unique_id = generate_id()
答案 0 :(得分:1)
while True:
a = generate_id()
if a not in set(existing_ids) :
break
答案 1 :(得分:0)
调试:
for id in existing_ids:
这表示对existing_ids
中的项目数执行循环,这绝对不是您想要的。
if not generate_project_id() == id:
unique_id = generate_project_id()
除了错误的方法名称之外,generate_project_id()
应该是generate_id()
,这将不会像您想的那样工作,即,即使id
是唯一的,它也会存储不同的id
中的unique_id
,因为它再次调用了方法unique_id = generate_project_id()
,谁知道它可能是 dupe !
因此:
如果要一直生成唯一ID,直到显示现有列表中不存在的唯一ID,请使用set()
将其放入循环中,以排除现有列表中的所有重复项:
import string
def generate_id():
random_id = ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(5))
return random_id
existing_ids = ['AAAAA', 'BBBBB', 'CCCCC']
while True:
genId = generate_id()
if genId not in set(existing_ids):
unique_id = genId
break
答案 2 :(得分:0)
import random
import string
def generate_id():
random_id = ''
random_id = ''.join(random.choice
(string.ascii_uppercase + string.digits) for _ in range(5))
return random_id
existing_ids = ['AAAAA', 'BBBBB', 'CCCCC']
unique_id = generate_id()
while unique_id in existing_ids:
unique_id = generate_id()
if unique_id not in existing_ids:
break;
print(unique_id)
答案 3 :(得分:0)
我认为您可以尝试位图?由于5个字符可以构造一个<{2**32
的数字,因此您可以生成一个随机数[0-26**6
]并将其用于mod 26以获取仅5个字符,
您可以使用位图检查其是否存在。