计算一个元素在python列表中的一行中出现n次的次数
我正在尝试解决以下问题: 我有一个python计算一个元素在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
列表
,其中包含多个不同的元素,每个元素都可以重复:
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
,如中所示。