2013-02-15 3 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] 

Тогда для Exemple, вы получите:

>>> 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

+0

Это никогда не встречается в последнем положении, заданном OP. –

+0

Ой, правда. Моя вина. – pemistahl

Смежные вопросы