以下是对代码的优化:

  1. 将变量名改为有意义的名称,比如将lst改为numbers,将cnt改为count

  2. 可以使用collections.defaultdict来避免使用if判断是否在字典中存在该键。

  3. 可以使用enumerate来避免使用range和下标。

  4. 可以使用列表解析式来减少代码行数。

优化后的代码如下:

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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录