Python 将随机生成的字符串与现有字符串列表进行比较
我有一个表单需要一个唯一的5个字符的ID。我有一个函数可以生成这个唯一的ID。在表单中输入它之前,我想将它与现有的ID列表进行比较。如果生成的ID在列表中不存在,则将其传入变量;如果它确实存在并且不是唯一的,请生成另一个ID。最好的方法是什么 def生成_id: random_id=.joinrandom.choicestring.ascii_大写+字符串.digits表示范围5中的u 返回随机id 现有_id=['AAAAA','BBBBB','CCCCC'] 对于现有_id中的id: 如果不生成_id==id: 唯一\u id=生成\u id 调试: 这表示针对现有_id中的项数执行循环,这肯定不是您想要的Python 将随机生成的字符串与现有字符串列表进行比较,python,recursion,Python,Recursion,我有一个表单需要一个唯一的5个字符的ID。我有一个函数可以生成这个唯一的ID。在表单中输入它之前,我想将它与现有的ID列表进行比较。如果生成的ID在列表中不存在,则将其传入变量;如果它确实存在并且不是唯一的,请生成另一个ID。最好的方法是什么 def生成_id: random_id=.joinrandom.choicestring.ascii_大写+字符串.digits表示范围5中的u 返回随机id 现有_id=['AAAAA','BBBBB','CCCCC'] 对于现有_id中的id: 如果不
if not generate_project_id() == id:
unique_id = generate_project_id()
除了不正确的方法名称外,generate_project_id应该是generate_id,这不会像您认为的那样,即即使id是唯一的,它也会在unique_id中存储一个不同的id,因为它再次调用该方法,unique_id=generate_project_id,谁知道它可能是一个重复
因此:
如果要一直生成唯一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
我想你可以试试吗?因为5个字符可以构造一个小于2**32的数字,所以您可以生成一个随机数[0-26**6],并将其用于mod 26,以获得仅有的5个字符,
您可以使用位图检查它是否存在。对我来说很好,您卡在哪里了?除了一件事。使用while True而不是while 1。更清楚了。另外:现有的_id应该是一个集合,否则将花费很长时间。
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
while True:
a = generate_id()
if a not in set(existing_ids) :
break
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)