Python如何实现render_histogram函数基于数值列表生成星号直方图
问题分析
你的代码存在以下核心问题:
- 渲染逻辑颠倒:直方图需要从顶部到底部按行输出,你的代码是按列生成每列的星号串,没有按行维度做跨列的对齐处理
- 数据引用错误:最终拼接字符串时只取了第一列的内容(
rowrow[0]),直接丢弃了剩余列的所有数据 - 缺少占位逻辑:没有对数值为0的列、未达当前行高度的列做占位处理,会出现列错位的情况
修改方案
先确定整个直方图的最大高度(即输入列表的最大值),从最高行开始逐行向下遍历:每一行依次判断每个位置的数值是否大于等于当前行高度,符合条件则输出*,否则输出占位空格,拼接完一行后加换行符,最终返回完整的拼接字符串即可。
可运行的修改后代码
def render_histogram(values): if not values: return "" max_height = max(values) res = [] # 从最高行往下遍历 for h in range(max_height, 0, -1): row = [] for v in values: row.append('*' if v >= h else ' ') res.append(''.join(row)) return '\n'.join(res) print(render_histogram([5, 4, 2, 7, 0, 3, 10]))
运行效果
输出结果和示例要求完全匹配:
* * * * * * * * * * * * * * * * ** * ** *

内容的提问来源于stack exchange,提问作者LukeDalton
相关产品推荐
相关产品推荐

