[蓝桥杯备赛]Counter函数学习笔记

今天学习了Python的Counter函数,做笔记加强一下记忆

目录

示例:

len(counter) 与 sum(counter.values()) 的区别

在滑动窗口中的应用

总结


Counter功能:可以支持方便、快速的计数,将元素数量统计,然后计数并返回一个字典,键为元素,值为元素个数。

示例:

from collections import Counter

# 创建一个 Counter 对象
counter = Counter(['a', 'b', 'a', 'c', 'b', 'a'])

print(len(counter))  # 输出: 3(不同元素的数量)
print(sum(counter.values()))  # 输出: 6(所有元素的总数)

###################分割线#####################


print(counter.items()) #counter.items()获取字典的key和value
#结果:按字母顺序排序的
#counter_items([('a', 3), ('b', 2), ('c', 1)])

print(counter.keys())
#结果:
#counter_keys(['a', 'b', 'c'])

print(counter.values())
#结果:
#counter_values([3, 2, 1])

len(counter) 与 sum(counter.values()) 的区别

  • len(counter):返回 不同元素的数量

  • sum(counter.values()):返回 所有元素的计数总和

在滑动窗口中的应用

在滑动窗口问题中,len(counter) 常用于检查窗口中 不同元素的数量 是否满足条件。

eg:

from collections import Counter

# 假设窗口中的元素是 [1, 2, 2, 3]
window = [1, 2, 2, 3]

# 使用 Counter 统计元素频率
counter = Counter(window)

# 不同元素的数量
unique_count = len(counter)

print("不同元素的数量:", unique_count)  # 输出: 3

总结

  • len(counter) 返回 Counter 对象中 不同元素的数量

  • 在滑动窗口问题中,len(counter) 是检查窗口中不同元素数量的高效方法。

  • 如果需要统计所有元素的总数,可以使用 sum(counter.values())

<think>嗯,用户想了解蓝桥杯Python竞技巧和建议。我需要根据提供的引用内容来组织答案。首先,用户提到的引用里有几个重点:文件操作、标准库的使用、数据结构操作、算法效率。这些都是的关键点。 首先,文件操作在蓝桥杯中很重要,因为题目常常需要处理多行输入。用户提到手动输入效率低,使用文件读取能节省时间。这里我应该强调使用`sys.stdin`或者`open`来处理输入,尤其是多行数据的情况。例如,引用[1]里提到文件操作能提高效率,可以举例子说明如何读取数据。 然后,标准库的使用。Python只能使用标准库,所以需要熟悉常用的模块,比如`collections`中的`deque`和`defaultdict`,`itertools`的组合生成函数,`heapq`的堆操作。引用[2]提到这些库在算法竞中的重要性,应该具体列出几个常用库和它们的应用场景,比如排列组合、堆结构处理等。 数据结构操作也是重点,引用[3]里有示例,需要强调列表、字典、集合的灵活运用。比如列表推导式、字典的快速查找,这些都是提高代码效率的关键。可能还要提到字符串处理,比如切片和`split`方法的使用。 算法方面,用户可能需要掌握排序、搜索、动态规划、贪心、图论等基础算法。这里需要分点说明,每个算法的应用场景和注意事项,比如递归的深度限制,或者动态规划的状态转移方程。另外,代码效率优化也很重要,比如避免不必要的循环,使用哈希表优化查找时间。 此外,测试和调试技巧也不能忽视。引用[4]可能提到一些实际案例或资源,但链接无法访问,所以可能需要从其他引用中提取相关内容,比如边界条件测试、使用断言等。 用户的问题还涉及到生成相关问题,我需要根据回答内容提出相关问题,比如如何优化输入输出速度,或者动态规划的解题步骤。这些问题应该与技巧相关,帮助用户进一步深入学习。 最后,确保回答结构清晰,分点列出,每个技巧都有例子或具体建议,并结合引用中的内容添加引用标识。例如,在提到文件操作时引用[^1],标准库的使用引用[^2],数据结构引用[^3]。</think>### 蓝桥杯 Python 竞技巧与建议 #### 一、输入输出优化技巧 1. **文件操作加速输入** 蓝桥杯题目常涉及多行数据输入,建议使用`sys.stdin`或`open()`批量读取。例如: ```python import sys data = [line.strip() for line in sys.stdin] # 一次性读取所有行 ``` 处理矩阵输入时可用: ```python matrix = [list(map(int, line.split())) for line in data] ``` 2. **输出格式控制** 使用`print(*list)`解包输出列表元素,或`"".join()`拼接字符串提升效率。 #### 二、标准库的深度运用 1. **常用库与场景** - `collections`:`deque`实现BFS队列,`defaultdict`处理缺失键[^2] - `itertools`:`permutations`生成排列,`combinations`生成组合 - `heapq`:实现优先队列(Dijkstra算法常用) ```python from heapq import heappush, heappop heap = [] heappush(heap, (priority, value)) ``` 2. **数学运算辅助** `math`库的`gcd`(最大公约数)、`sqrt`(平方根)可加速数论题解答。 #### 三、数据结构的高效操作 1. **列表推导式与生成器** 替代多重循环,减少内存占用: ```python filtered = [x**2 for x in range(100) if x % 3 == 0] ``` 2. **字典快速查询** 用字典代替多重条件判断: ```python color_map = {'R': 'Red', 'G': 'Green'} print(color_map.get(key, 'Unknown')) ``` 3. **集合去重与运算** 利用集合特性快速处理交集/并集: ```python a = {1,2,3}; b = {3,4,5} print(a & b) # 输出{3} ``` #### 四、算法核心要点 1. **基础算法掌握** | 算法类型 | 典型问题 | 优化要点 | |----------------|------------------------|---------------------------| | 动态规划 | 背包问题、最长子序列 | 状态压缩(滚动数组) | | 贪心算法 | 区间调度、哈夫曼编码 | 正确性证明 | | 图论算法 | 最短路径、最小生成树 | 邻接表存储结构 | 2. **递归深度问题** 当递归层级超过`1000`时,需设置: ```python import sys sys.setrecursionlimit(100000) ``` #### 五、测试与调试策略 1. **边界条件测试** - 空输入测试(如`n=0`) - 极值测试(如$10^5$量级数据) - 特殊数据结构测试(如完全二叉树) 2. **性能分析工具** 使用`time`模块定位耗时操作: ```python import time start = time.perf_counter() # 待测试代码 print(f"耗时: {time.perf_counter()-start:.4f}s") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值