You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 17:03:10