Python如何统计列表中指定术语去除连续重复后的出现次数
Python 实现相邻重复术语去重计数
功能规则
- 统计列表内指定术语的出现次数
- 术语连续多次相邻出现时仅计数1次
- 仅当前一位置元素不等于目标术语时,本次出现才计入次数
示例验证
示例1
输入列表:
['11A/B - FPC1', 'Tool Shelf', 'Repair', 'Tool Shelf', 'Tool Shelf', 'Repair', 'Repair', 'Tool Shelf', 'Tool Shelf', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair']
目标术语:Repair
统计结果:3
示例2
输入列表:
['11A/B - FPC1', 'Tool Shelf', 'Repair', 'Tool Shelf', 'Tool Shelf', 'Tool Shelf', 'Tool Shelf', 'Tool Shelf', 'Tool Shelf', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair']
目标术语:Repair
统计结果:2
实现代码
方案1:基础遍历实现(兼容性好、逻辑易懂)
def count_adjacent_unique(lst: list, target: str) -> int: count = 0 # 标记上一个遍历元素是否为目标术语 prev_is_target = False for item in lst: current_is_target = (item == target) # 当前为目标术语、且上一个不是时计数+1 if current_is_target and not prev_is_target: count += 1 prev_is_target = current_is_target return count
方案2:基于itertools.groupby简化实现
from itertools import groupby def count_adjacent_unique(lst: list, target: str) -> int: # groupby会将连续相同的元素归为同一组,直接统计值为target的组数量即可 return sum(1 for key, _ in groupby(lst) if key == target)
测试调用
# 示例1测试 lst1 = ['11A/B - FPC1', 'Tool Shelf', 'Repair', 'Tool Shelf', 'Tool Shelf', 'Repair', 'Repair', 'Tool Shelf', 'Tool Shelf', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair'] print(count_adjacent_unique(lst1, 'Repair')) # 输出3 # 示例2测试 lst2 = ['11A/B - FPC1', 'Tool Shelf', 'Repair', 'Tool Shelf', 'Tool Shelf', 'Tool Shelf', 'Tool Shelf', 'Tool Shelf', 'Tool Shelf', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair', 'Repair'] print(count_adjacent_unique(lst2, 'Repair')) # 输出2
内容的提问来源于stack exchange,提问作者Keegz
相关产品推荐
相关产品推荐

