如何在Python中从频率表输入生成对应数据列表
实现值与频率映射并生成展开列表
1. 处理输入并创建{值:频率}字典
先把空格分隔的输入字符串转成整数列表,再用zip()将值列表和频率列表配对,直接转成字典就是最简洁的实现方式:
# 模拟输入(实际可通过input().split()获取用户输入) value_input = "1 2 3 4 5" freq_input = "5 4 3 2 1" # 转换为整数列表 values = list(map(int, value_input.split())) freqs = list(map(int, freq_input.split())) # 创建值-频率字典 value_freq_dict = dict(zip(values, freqs)) print(value_freq_dict) # 输出: {1:5,2:4,3:3,4:2,5:1}
如果偏好手动循环实现,也可以这么写:
value_freq_dict = {} for v, f in zip(values, freqs): value_freq_dict[v] = f
2. 生成展开后的列表
有了字典后,用两种常用方式都能快速生成目标列表:
方法一:列表推导式
expanded_list = [v for v, freq in value_freq_dict.items() for _ in range(freq)] print(expanded_list) # 输出: [1,1,1,1,1,2,2,2,2,3,3,3,4,4,5]
方法二:循环累加
expanded_list = [] for v, freq in value_freq_dict.items(): expanded_list.extend([v] * freq)
注意事项
- 必须保证值输入和频率输入的元素数量一致,否则
zip()会自动截断到较短列表的长度,导致部分数据丢失。 - 如果值列表存在重复值,字典中后面的键会覆盖前面的(因为字典键唯一),若你的场景可能出现重复值,需要提前处理或改用列表存储元组的结构。
内容的提问来源于stack exchange,提问作者C0D3R M4DN3SS
相关产品推荐
相关产品推荐

