python二维数组按行列遍历耗时差异

932 阅读1分钟
# -*- coding: utf-8 -*-

"""
函数计数装饰器计时,测试二维列表按行和列访问差异
"""
import time
from functools import wraps


# 运行计时
def time_count(func):
    @wraps(func)
    def inner(*args, **kwargs):
        _t1 = time.time()
        ret = func(*args, **kwargs)
        _t2 = time.time()
        print("{}\n用时:{}秒".format('_' * 50, round((_t2 - _t1), 4)))
        return ret

    return inner


@time_count
def travel_by_row(arr):
    print("二维数组按行遍历")
    n = 0
    for i in range(num):
        for j in range(num):
            n += arr[i][j]
    return n


@time_count
def travel_by_col(arr):
    print("二维数组按列遍历")
    n = 0
    for j in range(num):
        for i in range(num):
            n += arr[i][j]
    return n


if __name__ == "__main__":
    num = 5000
    a = [[m + n for m in range(num)] for n in range(num)]

    travel_by_row(a)
    print("\n")
    travel_by_col(a)

输出结果:

二维数组按行遍历
__________________________________________________
用时:1.795秒


二维数组按列遍历
__________________________________________________
用时:3.511秒