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

计算一个元素在python列表中的一行中出现n次的次数,python,python-3.x,list,Python,Python 3.x,List,我正在尝试解决以下问题: 我有一个python列表,其中包含多个不同的元素,每个元素都可以重复: list = ['a', 'a', 'b', 'a', 'foo','foo','foo', 'c','foo', 'd', 'foo','foo'] 我想知道某个元素有多少次,例如,foo连续出现n次,不计算第一次出现的次数。因此,列表的计数如下: list = ['a', 'a', 'b', 'a', 'foo','foo','foo', 'c','foo', 'd', 'foo','fo

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

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

list =  ['a', 'a', 'b', 'a', 'foo','foo','foo', 'c','foo', 'd', 'foo','foo']
我想知道某个元素有多少次,例如,
foo
连续出现n次,不计算第一次出现的次数。因此,
列表
的计数如下:

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

有什么干净的方法吗

我看到了,但这是为特定数量的出现。在我的例子中,一行中出现的次数不是预先确定的。我想我都不能用同样的理由。

通过groupby

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'))
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
def count_函数(列表,目标):
如果len(列表)<2:
返回0
val=0
prev=列表[0]
对于列表[1:]中的元素:
如果elem==target且elem==prev:
val+=1
prev=元素
返回值
列表=['a'、'a'、'b'、'a'、'foo'、'foo'、'foo'、'c'、'foo'、'd'、'foo'、'foo']
打印(计数函数(列表'foo'))
您可以这样做:

def special_count(l, n):
  from collections import Counter
  from itertools import groupby 

  s = 0
  for k, v in groupby(lst):
    if k == n:
      s += sum(1 for _ in v) - 1
  return s


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

print(special_count(lst, 'foo'))  #_> 3

直到有一个groupby方法谢谢!这正是我想要的。请注意:如果有人面临类似的问题,但是有一个列表,您可以使用两种方法:要么将嵌套列表过滤为具有理解力的简单列表。或者直接更改
groupby
,如中所示。