zoukankan      html  css  js  c++  java
  • Python3求笛卡尔积的两种方法

    [本文出自天外归云的博客园]

    电影异次元杀阵三部曲中密室线索反复出现笛卡尔积的运用。百度百科:

    笛卡尔乘积是指在数学中,两个集合XY的笛卡尓积(Cartesian product),又称直积,表示为X × Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中的一个成员 。

    笛卡尔积的符号化为:A×B={(x,y)|x∈A∧y∈B}

    求笛卡尔积的两种方法如下,第一种是我自己想的方法,第二种方法是用itertools,对比了一下两种方法的时间消耗,几次测试下来发现itertools的方法稍微慢一点点:

    def calc_time(desc=None):
        def calc(func):
            def wrapper(*args, **kwargs):
                from datetime import datetime
                start_time = datetime.now()
                r = func(*args, **kwargs)
                end_time = datetime.now()
                print(f"{desc} Used time: {(end_time-start_time).microseconds} Descartes: {r}")
    
            return wrapper
    
        return calc
    
    
    @calc_time("方法1")
    def descartes_1(a, b):
        return [f"{a[i]}{b[j]}" for i in range(len(a)) for j in range(len(b))]
    
    
    @calc_time("方法2")
    def descartes_2(a, b):
        import itertools
        return [f"{i[0]}{i[1]}" for i in itertools.product(a, b)]
    
    
    if __name__ == '__main__':
        a = [i for i in range(2000)]
        import string
        b = [i for i in string.ascii_lowercase]
        descartes_1(a, b)
        descartes_2(a, b)

    测试结果如下:

    在求2000个数字和26个小写字母笛卡尔积的情况下,第一种方法比第二种快了1000微秒。

  • 相关阅读:
    nodejs安装
    mongodb安装指南
    JQuery控制input的readonly和disabled属性
    C# 汉子增加UTF-8头
    Microsoft Visual C++ 2005 SP1 Redistributable 安装错误
    sql server 查找指定字符串的位置
    sql server 数据库附加时程序集错误
    前端路由
    CSS学习笔记——选择器优先级
    CSS学习笔记——盒子模型
  • 原文地址:https://www.cnblogs.com/LanTianYou/p/9138147.html
Copyright © 2011-2022 走看看