如何从给定列表中随机选2个元素生成互不相等的列表A与列表B
Python实现代码
默认满足以下规则:
- 单个列表内的2个元素为无放回抽取,不会重复
- 两个列表只要元素完全相同(无论顺序)都判定为「完全相等」,不符合要求
如果需要调整规则可以修改对应逻辑。
方案1:简单循环实现(新手友好)
# 导入随机数模块 import random # 定义原始国家列表 country = ["Australia", "America", "England", "Spain"] # 随机无放回抽取2个元素生成列表A A = random.sample(country, k=2) # 循环生成列表B,直到和A不完全相等 while True: B = random.sample(country, k=2) # 排序后比较可忽略顺序,判断两个列表元素是否完全一致 if sorted(A) != sorted(B): break # 验证结果 print("列表A:", A) print("列表B:", B)
random.sample(序列, k=数量)为无放回随机抽样方法,天然保证单个列表内不会出现重复元素- 由于总可能的2元素组合仅有6种,循环逻辑最坏情况也只会执行几次,无性能问题
方案2:预生成所有组合实现(性能更优)
适合原始列表元素较多的场景,无需循环即可保证两个列表不相等:
import random from itertools import combinations country = ["Australia", "America", "England", "Spain"] # 生成所有无放回抽取2个元素的不重复组合 all_combinations = list(combinations(country, 2)) # 随机选取两个不同的组合分别转为列表 A, B = map(list, random.sample(all_combinations, k=2))
规则调整说明
- 如果需要允许单个列表内出现重复元素(有放回抽样):将
random.sample(country, k=2)替换为random.choices(country, k=2)即可 - 如果认为元素顺序不同就算两个列表不相等:将方案1中的
sorted(A) != sorted(B)改为A != B即可
内容的提问来源于stack exchange,提问作者Hossein.gh
相关产品推荐
相关产品推荐

