我被朋友挑战制作一个简单的程序,要求用户输入最大值,然后输入样本大小(n)。然后它使用randint在shell中使用ascii字符创建直方图。
我可以很容易地建立班级宽度和界限。我遇到麻烦的地方是理解和实现某种算法,该算法会将属于特定类的所有数字附加到要打印的直方图列表中。例如,如果我有:
sample = [5, 1, 3, 9, 7, 13, 12, 5]
class_boundaries = [(1, 4), (4, 7), (7, 10), (10, 14)]
histogram = []
我只需要创建一个函数,将样本值附加到它们所属的位置,以引用类边界。因此,例如,histogram [0]应该返回[1,3]。我一直在尽我所能尝试不同的解决方案并理解for循环算法或列表推导功能如何,但对我的问题的实际解释对我更好地理解如何编程非常有帮助。提前谢谢!
答案 0 :(得分:1)
sample = [5, 1, 3, 9, 7, 13, 12, 5]
class_boundaries = [(1, 4), (4, 7), (7, 10), (10, 14)]
classified = [[X for X in sample if LO <= X <= HI] for LO,HI in class_boundaries]
counts = [sum(LO <= X <= HI for X in sample) for LO,HI in class_boundaries]
结果:分类= [[1,3],[5,7,5],[9,7],[13,12]],计数= [2,3,2,2]
计算的计算不需要分类,所以如果你需要的话,跳过分类步骤。