2016-06-10 70 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

非常感謝!這一切都是不言自明的,但我仍然無法自己寫和理解列表理解。 –