考虑到顺序计算 Python 中的重复值
Count duplicated value in Python considering sequence
我的 string
值为:
s = 'asdabbdasfababbabb'
我使用下面的代码拆分了 str
,得到的结果如下:
n = 3
split_strings = [s[index : index + n] for index in range(0, len(s), n)]
['asd', 'abb', 'das', 'fab', 'abb', 'abb']
我需要达到的目标:
我想计算重复的值,例如:
({'asd': 1, 'abb': 1, 'das': 1, 'fab': 1, 'abb' : 2})
但是,如果我使用 Counter()
它会计算重复值,但似乎没有考虑列表的顺序:
Counter({'asd': 1, 'abb': 3, 'das': 1, 'fab': 1})
我怎样才能达到我所需要的?
不能在字典中存储重复的键。如果你愿意有一个元组列表,你可以使用 itertools.groupby
:
from itertools import groupby
lst = ['asd', 'abb', 'das', 'fab', 'abb', 'abb']
counts = [(k, len([*g])) for k, g in groupby(lst)]
print(counts) # [('asd', 1), ('abb', 1), ('das', 1), ('fab', 1), ('abb', 2)]
itertools.groupby
函数是最受欢迎的,但也许未来的读者可能会喜欢一种用于实际查找这些分组的算法:
def groups(*items):
i = 0
groups = []
while i < len(items):
item = items[i]
j = i + 1
count = 1
while j < len(items):
if items[j] == item:
count += 1
j += 1
else:
break
i = j
groups.append((item, count))
return groups
我的 string
值为:
s = 'asdabbdasfababbabb'
我使用下面的代码拆分了 str
,得到的结果如下:
n = 3
split_strings = [s[index : index + n] for index in range(0, len(s), n)]
['asd', 'abb', 'das', 'fab', 'abb', 'abb']
我需要达到的目标:
我想计算重复的值,例如:
({'asd': 1, 'abb': 1, 'das': 1, 'fab': 1, 'abb' : 2})
但是,如果我使用 Counter()
它会计算重复值,但似乎没有考虑列表的顺序:
Counter({'asd': 1, 'abb': 3, 'das': 1, 'fab': 1})
我怎样才能达到我所需要的?
不能在字典中存储重复的键。如果你愿意有一个元组列表,你可以使用 itertools.groupby
:
from itertools import groupby
lst = ['asd', 'abb', 'das', 'fab', 'abb', 'abb']
counts = [(k, len([*g])) for k, g in groupby(lst)]
print(counts) # [('asd', 1), ('abb', 1), ('das', 1), ('fab', 1), ('abb', 2)]
itertools.groupby
函数是最受欢迎的,但也许未来的读者可能会喜欢一种用于实际查找这些分组的算法:
def groups(*items):
i = 0
groups = []
while i < len(items):
item = items[i]
j = i + 1
count = 1
while j < len(items):
if items[j] == item:
count += 1
j += 1
else:
break
i = j
groups.append((item, count))
return groups