继续优化以上代码
以下是对代码的优化:
-
将变量名改为有意义的名称,比如将
lst改为numbers,将cnt改为count。 -
可以使用
collections.defaultdict来避免使用if判断是否在字典中存在该键。 -
可以使用
enumerate来避免使用range和下标。 -
可以使用列表解析式来减少代码行数。
优化后的代码如下:
from collections import defaultdict
def count_numbers(numbers):
count_dict = defaultdict(int)
for num in numbers:
count_dict[num] += 1
return [count_dict[i] for i in range(1, len(numbers)+1)]
上述代码中,defaultdict(int)表示如果字典中没有该键,则默认值为0。enumerate可以遍历列表并返回元素下标和元素本身,例如:
for i, num in enumerate(numbers):
print(i, num)
输出:
0 3
1 3
2 2
3 1
4 3
使用列表解析式可以将循环简化:
count_dict = {num: numbers.count(num) for num in range(1, len(numbers)+1)}
但是这种方法的时间复杂度为O(n^2),不如上面的方法高效。
原文地址: https://www.cveoy.top/t/topic/bihK 著作权归作者所有。请勿转载和采集!