在列表中查找 ContiguousCount 项?
Finding ContiguousCount of items in list?
给定一个列表:
>>> l = ['x', 'x', 'y', 'y', 'x']
我可以使用 collections.Counter
:
获取列表的计数
>>> from collections import Counter
>>> Counter(l)
Counter({'x': 3, 'y': 2})
如何计算连续项目而不是列表中元素的全局计数? 例如
>>> l = ['x', 'x', 'y', 'y', 'x']
>>> ContiguousCounter(l)
[('x',2), ('y',2), ('x', 1)]
>>> l = ['x', 'x', 'y', 'y', 'x', 'x', 'x', 'y']
>>> ContiguousCounter(l)
[('x',2), ('y',2), ('x', 3), ('y', 1)]
您可以使用内置 itertools.groupby
函数:
In [3]: from itertools import groupby
In [4]: l = ['x', 'x', 'y', 'y', 'x']
In [5]: list(groupby(l))
Out[5]:
[('x', <itertools._grouper at 0x7fd94716f1d0>),
('y', <itertools._grouper at 0x7fd94716f208>),
('x', <itertools._grouper at 0x7fd94716f240>)]
In [6]: [(x, len(list(g))) for x, g in groupby(l)]
Out[6]: [('x', 2), ('y', 2), ('x', 1)]
给定一个列表:
>>> l = ['x', 'x', 'y', 'y', 'x']
我可以使用 collections.Counter
:
>>> from collections import Counter
>>> Counter(l)
Counter({'x': 3, 'y': 2})
如何计算连续项目而不是列表中元素的全局计数? 例如
>>> l = ['x', 'x', 'y', 'y', 'x']
>>> ContiguousCounter(l)
[('x',2), ('y',2), ('x', 1)]
>>> l = ['x', 'x', 'y', 'y', 'x', 'x', 'x', 'y']
>>> ContiguousCounter(l)
[('x',2), ('y',2), ('x', 3), ('y', 1)]
您可以使用内置 itertools.groupby
函数:
In [3]: from itertools import groupby
In [4]: l = ['x', 'x', 'y', 'y', 'x']
In [5]: list(groupby(l))
Out[5]:
[('x', <itertools._grouper at 0x7fd94716f1d0>),
('y', <itertools._grouper at 0x7fd94716f208>),
('x', <itertools._grouper at 0x7fd94716f240>)]
In [6]: [(x, len(list(g))) for x, g in groupby(l)]
Out[6]: [('x', 2), ('y', 2), ('x', 1)]