如何从bowlers列表生成无连续重复的随机重复列表lineup?

我有一个包含6个名字的list,希望将这些名字随机重复生成20次,并保存到名为lineup的list中。但我不希望列表中出现连续重复的名字,例如不希望出现['Shadab', 'Shadab'..]这样的连续重复情况。
我该如何解决这个问题?
我曾尝试将bowlers列表中的名字追加到新列表lineup中,之后通过索引替换重复的名字,但未能成功实现。
解决方法
直接用Python的random模块就能实现,核心逻辑是每次选名字时排除上一次选中的选项,避免连续重复:
import random # 替换成你的bowlers列表 bowlers = ["Shadab", "Aamir", "Wahab", "Hasan", "Rumman", "Faheem"] lineup = [] # 先添加第一个随机名字 last_selected = random.choice(bowlers) lineup.append(last_selected) # 生成剩下的19个名字 for _ in range(19): # 过滤掉上一个选中的名字,从剩余选项里随机选 candidates = [name for name in bowlers if name != last_selected] current = random.choice(candidates) lineup.append(current) last_selected = current # 查看结果 print(lineup)
说明
- 每次选择时都会排除上一个名字,从根源避免连续重复
- 只要原始
bowlers列表长度大于1(你的情况是6个),这个逻辑就能稳定运行 - 最终
lineup的长度刚好是20,完全符合需求
内容的提问来源于stack exchange,提问作者Saad
相关产品推荐
相关产品推荐

