计算python列表中的值的数量

时间:2015-03-12 05:53:55

标签: python

 x = [20, 6, 99, 3, 6, 2, 1,11,41, 31, 99, 6, 7, 8, 99, 10, 99 ,6] 

    y =[]
    for j in x:
        y[j]+=1

我想计算x中列表值的出现次数。当我尝试使用上面的代码时,我收到一个错误。有什么问题在我的代码中?

我是编程新手,所以请用简单的方式解释一下。 我想要的输出是一个列表,其中包含x中值的出现次数。

5 个答案:

答案 0 :(得分:3)

您应该使用字典而不是列表,并且还要小​​心 - 如果字典中不存在该值,则无法添加+1,这就是您应该使用.get(j, 0)的原因(如果是第一次出现的话,零将作为默认值返回):

x = [20, 6, 99, 3, 6, 2, 1,11,41, 31, 99, 6, 7, 8, 99, 10, 99 ,6] 

y ={}
for j in x:
    y[j] = y.get(j,0) + 1
print y # {1: 1, 2: 1, 3: 1, 6: 4, 7: 1, 8: 1, 41: 1, 10: 1, 11: 1, 99: 4, 20: 1, 31: 1}

答案 1 :(得分:0)

在您的代码中y是一个列表。因此y[j]j=6,例如,获取y的第6个元素。相反,您要做的是将y初始化为dict,例如y={}

您的代码将变为:

y = {}
for j in x:
    y[j] = y.get(j,0) + 1

Python 2.6+的甚至更好的方式是使用Counter

答案 2 :(得分:0)

您可以使用collection.counter函数。

>>> from collections import Counter
>>> x = [20, 6, 99, 3, 6, 2, 1,11,41, 31, 99, 6, 7, 8, 99, 10, 99 ,6]
>>> Counter(x)
Counter({99: 4, 6: 4, 1: 1, 2: 1, 7: 1, 8: 1, 41: 1, 10: 1, 11: 1, 3: 1, 20: 1, 31: 1})
>>> dict(Counter(x))
{1: 1, 2: 1, 99: 4, 6: 4, 7: 1, 8: 1, 41: 1, 10: 1, 11: 1, 3: 1, 20: 1, 31: 1}

答案 3 :(得分:0)

如果计算机不知道阵列的大小,则无法访问阵列的元素。想象一下,计算机认为你的数组y长度为10,并为它留出一小块内存,并将其余的内存用于其他东西,如电脑游戏。现在假设x中的一个数字是10000000000.那么计算机将不得不修改远离数组开头的单元格,这将是不好的,因为计算机已经将该内存用于其他事情,你没有事先警告过它。

在较低级别的语言中,比如C,你首先声明一个数组(为它预留内存),然后为其元素赋值。

在您的示例中,您的数组y实际上长度为0,因此当您尝试访问其中的元素时,计算机可以理解为无法理解。

答案 4 :(得分:0)

馆藏中还有Counter

from collections import Counter

x = [20, 6, 99, 3, 6, 2, 1, 11, 41, 31, 99, 6, 7, 8, 99, 10, 99, 6] 
cnt = Counter(x)

输出的示例视图:

dict(cnt)
Out[113]: {1: 1, 2: 1, 3: 1, 6: 4, 7: 1, 8: 1, 10: 1, 11: 1, 20: 1, 31: 1, 41: 1, 99: 4}

list(cnt)
Out[114]: [1, 2, 3, 6, 7, 8, 41, 10, 11, 99, 20, 31]

list(cnt.viewitems())
Out[115]: 
[(1, 1),
 (2, 1),
 (3, 1),
 (6, 4),
 (7, 1),
 (8, 1),
 (41, 1),
 (10, 1),
 (11, 1),
 (99, 4),
 (20, 1),
 (31, 1)]