计算一个元素在python列表中的一行中出现n次的次数

2024-05-16 13:26:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试解决以下问题:

我有一个python list,其中包含多个不同的元素,每个元素都可以重复:

list =  ['a', 'a', 'b', 'a', 'foo','foo','foo', 'c','foo', 'd', 'foo','foo']

我想知道某个元素有多少次,例如foo连续出现n次,而不计算第一次出现的次数。因此list的计数如下:

list =  ['a', 'a', 'b', 'a', 'foo','foo','foo', 'c','foo', 'd', 'foo','foo']
         +0,  +0 , +0 , +0   ,+0  , +1  , +1  , +0 , +0  , +0 ,  +0  ,  +1    = 3

在这种情况下,所需的输出将是3

有什么干净的方法吗

我看到了this,但这是针对特定数量的外观。在我的例子中,一行中出现的次数不是预先确定的。我想出于同样的原因,我两者都不能使用this other


Tags: 方法元素数量foo情况原因this次数
3条回答
def count_function(list, target):
    if len(list) < 2:
        return 0
    val = 0
    prev = list[0]
    for elem in list[1:]:
        if elem == target and elem == prev:
            val += 1
        prev = elem
    return val

list =  ['a', 'a', 'b', 'a', 'foo','foo','foo', 'c','foo', 'd', 'foo','foo']
print(count_function(list, 'foo'))

通过groupby

from itertools import groupby
l = ['a', 'a', 'b', 'a', 'foo', 'foo', 'foo', 'c', 'foo', 'd', 'foo', 'foo']


result = sum(len(list(key))-1 for grp, key in groupby(l)
             if grp == 'foo')  # prints 3
lis =  ['a', 'a', 'b', 'a', 'foo', 'foo', 'foo', 'c', 'foo', 'd', 'foo', 'foo']

def count_occurence(desired):
    count = 0
    last_item = None
    for item in lis:
        if item == desired:
            if last_item == desired:
                continue
            count += 1
        last_item = item
    return count

print(count_occurence('foo'))

相关问题 更多 >