在python中计算列表中元素的出现次数

时间:2016-11-07 17:41:06

标签: python counter

我写了这个代码来计算列表中元素的出现但我有一个问题,我不知道为什么..任何帮助!

l = [1,2,3,4,5,5,5,1,2,3]
y = input ("what is the number : ")
x = int (y)
n=len(l)-1
def Count (l,n,x):
    count = 0 
    for i in range (0,n):
        if (l[i] == x):
            count = count + 1
        elif (l[i]>x):
            break
        return count     
print (Count(l,n,x))

输出没有意义所以我只想知道我的代码中的错误.. 问候

4 个答案:

答案 0 :(得分:1)

如果您正在寻找一个简短的解决方案:

def occurrences(mylist, number):
    return len([n for n in mylist if number == n])

答案 1 :(得分:0)

l = [1, 2, 3, 4, 5, 5, 5, 1, 2, 3]
y = input("what is the number : ")
x = int(y)
n = len(l)


def Count(l, n, x):
    count = 0
    for i in range(0, n):
        if (l[i] == x):
            count = count + 1
    return count


print(Count(l, n, x))
  1. 你太早回来(仅仅一圈之后)
  2. 您不检查最后一个元素(-1)
  3. 您打算检查列表是否已排序?

    elif (l[i]>x):
        break
    

    也是一个简短的版本: print(l.count(x))

答案 2 :(得分:0)

这样可行:

a = [1,1,2,3,3,4,4,5,5,5,5,5,6]
b = {}
for x in set(a):
    b[x] = 0
    for y in a:
        if x == y:
            b[x] += 1
print(b)

(它可能效率非常低,但它适用于任何列表,您可以同时得到每个项目的计数(好的或坏的,由您决定))

答案 3 :(得分:0)

如果没有实际输出,我会注意到一些问题:

您的elif语句似乎依赖于列表在传递到您的函数时进行排序的事实,但您不会在函数之前或之中对其进行排序。

您不检查最后一个元素,因为range命令包含最高值(例如range(1,5)生成数字1, 2, 3, 4 5,因此请将for循环更改为n+1

您的return语句位于for循环内,这意味着在for循环执行一次后,它会立即返回。您应该将return语句取消一个缩进级别,以便在循环完全完成之前不会返回。