如何用Python random模块生成按元组首元素去重的随机列表?
实现方法
思路拆解
- 分组归类:先把原始列表里首元素相同的元组归为一组,让每个首元素对应它所有可能的第二个元素集合。
- 随机抽取:对每个首元素对应的集合,用
random.choice()随机挑一个元素。 - 结果汇总:把每个首元素选中的元素收集成列表——原始数据里刚好有5个不重复的首元素,所以最终列表自然是5个元素,且每次运行结果不同。
代码实现
import random original_list = [('Anger', 'Envy'), ('Anger', 'Exasperation'), ('Joy', 'Zest'), ('Sadness', 'Suffering'), ('Joy', 'Optimism'), ('Surprise', 'Surprise'), ('Love', 'Affection')] # 按首元素分组 grouped = {} for key, value in original_list: if key not in grouped: grouped[key] = [] grouped[key].append(value) # 对每个分组随机选一个元素,生成结果列表 random_list = [random.choice(values) for _, values in grouped.items()] print(random_list)
代码说明
- 分组阶段:用字典
grouped存储每个首元素对应的所有第二个元素,比如grouped['Anger']会得到['Envy', 'Exasperation']。 - 随机选择阶段:通过列表推导式遍历字典的每个值,用
random.choice()随机选一个,确保每个首元素只对应一个值,且每次运行的选择结果都不一样。 - 运行示例:可能输出
['Exasperation', 'Optimism', 'Suffering', 'Surprise', 'Affection']或['Envy', 'Zest', 'Suffering', 'Surprise', 'Affection']等不同结果,完全符合需求。
内容的提问来源于stack exchange,提问作者Stop War
相关产品推荐
相关产品推荐

