2013-02-15 106 views
0

我試圖獲得列表中最後一位數字出現在列表中的頻率,並且有相當多的麻煩。計算python中另一個列表中每個列表項的頻率

基本上這是我試圖創建函數:

>>> ones_digit_histogram([0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765]) 
[0.09523809523809523, 0.19047619047619047, 0.047619047619047616, 0.14285714285714285, 0.14285714285714285, 0.14285714285714285, 0, 0.14285714285714285, 0.047619047619047616, 0.047619047619047616] 

,這是我迄今爲止

def last_digit(number): 
    last_digit = str(number)[-1] 
    last_digit = int(last_digit) 
    return last_digit 

def ones_digit_of_each_list_item(num_list):  
    returned_list = [] 
    for list_value in num_list: 
     returned_list = (returned_list + [last_digit(list_value)]) 

    return returned_list 

print ones_digit_of_each_list_item([123, 32, 234, 34, 22]) 

我遇到的麻煩包括獲得的

結果
ones_digit_of_each_list_item([123, 32, 234, 34, 22]) 

被包含在找到發生頻率(以百分比形式)中清單[123, 32, 234, 34, 22]

回答

1

數字的最後一位數字是數字除以十的餘數,因此您可以使用%運算符更高效地計算它。

在構建結果列表時,不是連接列表,而是將新值添加到新列表中,最好是.append()。或者更好地使用列表理解。

def last_digit(number): 
    return number % 10 

def one_digit_of_each_list_number(number_list): 
    return [last_digit(number) for number in number_list] 

然後,你只需要算(現在只有十位數可能,所以最好使用比字典列表)每個數字出現的次數,然後通過總數除以項目。

def ones_digit_histogram(number_list): 
    histogram = [0] * 10 
    for digit in one_digit_of_each_list_number(number_list): 
     histogram[digit] += 1 
    return [float(x)/len(number_list) for x in histogram] 

然後,您爲例,你會得到:

>>> print ones_digit_histogram([123, 32, 234, 34, 22]) 
[0.0, 0.0, 0.4, 0.2, 0.4, 0.0, 0.0, 0.0, 0.0, 0.0] 
+0

數字'1'在您的最後一個例子發生一次,所以它的結果不能'0.0'。 – pemistahl 2013-02-15 09:33:11

+0

根據OP的要求,它絕不會出現在最後的位置。 – 2013-02-15 09:35:43

+0

糟糕,真的。我的錯。 – pemistahl 2013-02-15 09:36:11

相關問題