Python技术咨询:如何实现生成三个互不重复随机ID的循环
解决方法
你的代码当前仅在三个ID完全相同时才重新选择,但需求是只要任意两个ID相等就需要重新随机,核心问题出在while循环的判断条件上。
方案一:修正循环判断条件
将循环条件改为检查三个ID是否存在重复(无论两个还是三个相同),只要有重复就继续随机选择:
import secrets from time import sleep ids = [{'id': number} for number in range(1, 5+1)] rand1 = secrets.choice(ids) rand2 = secrets.choice(ids) rand3 = secrets.choice(ids) n = 0 # 只要任意两个ID相等,就进入循环重新选择 while rand1['id'] == rand2['id'] or rand1['id'] == rand3['id'] or rand2['id'] == rand3['id']: n += 1 print('Before') print(rand1['id'], rand2['id'], rand3['id']) sleep(1) rand1 = secrets.choice(ids) rand2 = secrets.choice(ids) rand3 = secrets.choice(ids) print('After') print(rand1['id'], rand2['id'], rand3['id']) # 循环结束后输出符合条件的最终结果 print("最终结果:", rand1['id'], rand2['id'], rand3['id'])
也可以用集合简化重复判断(集合自动去重,长度小于3说明存在重复):
while len({rand1['id'], rand2['id'], rand3['id']}) != 3: # 循环内逻辑同上
方案二:更高效的随机选择方式
直接使用secrets.sample方法,它能从序列中随机选择指定数量的不重复元素,一步到位满足需求,无需循环重试:
import secrets ids = [{'id': number} for number in range(1, 5+1)] # 从ids中随机选3个不重复的元素 rand1, rand2, rand3 = secrets.sample(ids, k=3) print("结果:", rand1['id'], rand2['id'], rand3['id'])
这个方法避免了循环重试的开销,完全匹配你“三者互不相同”的需求。
内容的提问来源于stack exchange,提问作者Saeed
相关产品推荐
相关产品推荐

