2016-06-10 64 views
-1

我受到一位朋友的挑战,要求一个简单的程序要求用户输入最大值,然后输入样本大小(n)。然后它使用randint在shell中使用ascii字符创建直方图。创建一个引用特定范围的嵌套列表

我可以很容易地建立类的宽度和边界。在遇到麻烦的地方是理解和实现某种算法,该算法会将属于特定类的所有数字附加到要打印的直方图列表中。举例来说,如果我有:

sample = [5, 1, 3, 9, 7, 13, 12, 5] 
class_boundaries = [(1, 4), (4, 7), (7, 10), (10, 14)] 
histogram = [] 

我只需要做出追加,它们将属于中提到的阶级界限的位置样本值的函数。所以例如,直方图[0]应该返回[1,3]。我一直在尽我所能去尝试不同的解决方案,并理解for循环算法或列表解析如何运作,但对我的问题的实际解释对于我更好地理解如何编程非常有帮助。先谢谢你!

+0

您的预期输出是什么? –

+0

对于完成的程序,我使用len(直方图[i])打印出直方图。尽管如此,在直方图列表中打印出不同的列表是理解问题的理想选择。所以:打印直方图[0]中应该返回[1,3]。 –

回答

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]

计数的计算不需要分类,所以如果这就是你所需要的,跳过分类的步骤。

+1

'sum(LO <= X <= HI for sample in sample)'和你一样if else –

+1

Thanks - 编辑 – user29970

+0

非常感谢!这一切都是不言自明的,但我仍然无法自己写和理解列表理解。 –