在python中计算另一个列表中每个列表项的频率

时间:2013-02-15 05:48:49

标签: python python-2.7

我试图获得列表的最后一个数字出现在列表中的频率,并且遇到了相当多的麻烦。

基本上这是我试图创建的功能:

>>> 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 个答案:

答案 0 :(得分:1)

数字的最后一位是数字除以10的余数,因此您可以使用%运算符更有效地计算它。

构建结果列表时,最好是.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]