专业编程基础技术教程

网站首页 > 基础教程 正文

Python基础 - 生成list的方法和耗时统计

ccvgpt 2025-04-27 12:41:08 基础教程 2 ℃

通过列表拼接生成list

def gen_list_by_concat(n: int) -> List[int]:
    """
    通过列表拼接生成从 0 到 n-1 的整数列表。
    注意:使用 `+=` 拼接列表效率较低,不推荐用于大规模数据。
    """
    elem_list = []
    for i in range(n):
        elem_list += [i]
    return elem_list

通过append方法生成list

def gen_list_by_append(n: int) -> List[int]:
    """
    通过 `append` 方法生成从 0 到 n-1 的整数列表。
    比列表拼接更高效,适合小规模数据。
    """
    elem_list = []
    for i in range(n):
        elem_list.append(i)
    return elem_list

通过列表推导式生成list

def gen_list_by_comprehension(n: int) -> List[int]:
    """
    通过列表推导式生成从 0 到 n-1 的整数列表。
    代码简洁且效率高,推荐使用。
    """
    return [i for i in range(n)]

通过range方法和list方法生成list

def gen_list_by_list_range(n: int) -> List[int]:
    """
    通过 `range` 和 `list` 直接生成从 0 到 n-1 的整数列表。
    效率最高,代码最简洁,强烈推荐使用。
    """
    return list(range(n))

不同方法的耗时统计

def measure_time_with_log(func, *args, **kwargs):
    """
    测量函数执行时间并打印日志的通用函数。

    :param func: 要测量的函数
    :param args: 函数的位置参数
    :param kwargs: 函数的关键字参数
    :return: 函数的返回值
    """
    start_time = time.perf_counter()
    result = func(*args, **kwargs)
    end_time = time.perf_counter()
    elapsed_time = end_time - start_time
    print("'{}' takes {:.2f} milliseconds".format(func.__name__, elapsed_time * 1000))
    return result

if __name__ == '__main__':
    measure_time_with_log(gen_list_by_concat, 120000)
    measure_time_with_log(gen_list_by_append, 120000)
    measure_time_with_log(gen_list_by_comprehension, 120000)
    measure_time_with_log(gen_list_by_list_range, 120000)

运行结果示例:

'gen_list_by_concat' takes 6.35 milliseconds

Python基础 - 生成list的方法和耗时统计

'gen_list_by_append' takes 5.55 milliseconds

'gen_list_by_comprehension' takes 2.88 milliseconds

'gen_list_by_list_range' takes 1.40 milliseconds

总结

从代码简洁性的角度,推荐使用gen_list_by_comprehension()和gen_list_by_list_range()。

从代码性能的角度,优先使用gen_list_by_list_range(),其次是gen_list_by_comprehension()。

Tags:

最近发表
标签列表