美文网首页
笛卡尔积

笛卡尔积

作者: 小宝瓜 | 来源:发表于2020-02-25 17:51 被阅读0次

首先知道啥是笛卡尔积,百度百科中解释是这样的:

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

通俗理解就是一个集合中的所有元素与另外一个集合中的所有元素的所有组合。需要注意有先后顺序。

举个例子:
集合A={a,b}, B={0,1,2},则
A×B={(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}
B×A={(0, a), (0, b), (1, a), (1, b), (2, a), (2, b)}

再如:
集合A是所有声母,集合B是所有韵母。那么集合A与集合B的笛卡尔积就是所有的拼音组合。

python默认迭代器库itertools提供笛卡尔积计算函数product

用法:

itertools.product(*iterables, repeat=1)

示例1:
计算姓氏“张、李”和名“一、二、三”所有搭配组合。

# -*- coding:utf-8 -*-
from itertools import product

x = ["张", "李"]
m = ["一", "二", "三"]

for p in product(x, m):
    print(p)

------------output----------------------
('张', '一')
('张', '二')
('张', '三')
('李', '一')
('李', '二')
('李', '三')

示例2:
当然不仅仅是两个集合,多个集合也同样可以。
比如字典的生成。

# -*- coding:utf-8 -*-
from itertools import product

for pw in product(["pass", "Pass"], ["word", "Word"], ["123", "456"]):
    print(pw)
------------output----------------------
('pass', 'word', '123')
('pass', 'word', '456')
('pass', 'Word', '123')
('pass', 'Word', '456')
('Pass', 'word', '123')
('Pass', 'word', '456')
('Pass', 'Word', '123')
('Pass', 'Word', '456')

当然如果字典生成不需要有序的话,可以使用另外两个函数permutations
combinations

In [19]: list(permutations(["zhang", 3, '@'], 3))
Out[19]:
[('zhang', 3, '@'),
 ('zhang', '@', 3),
 (3, 'zhang', '@'),
 (3, '@', 'zhang'),
 ('@', 'zhang', 3),
 ('@', 3, 'zhang')]

In [20]: list(combinations(["zhang", 3, '@'], 3))
Out[20]: [('zhang', 3, '@')]

两者的区别在于,如果几个集合的元素相同,但位置顺序不同,permutations记为不同集,而combinations记为同一集合,也就是permutations为有序集合combinations为无序集合。

相关文章

  • 三、连接查询

    内连接 1、笛卡尔积 语法 无条件筛选 有条件筛选 什么是笛卡尔积?笛卡尔积就是将A和B表中的行任意组合,得到一个...

  • 笛卡尔积

    笛卡尔积,是指集合A中元素与B中元素所有的两两组合。 如A=(a,b),B=(1,2),那么笛卡尔积为(a1,a2...

  • 笛卡尔积

    笛卡尔乘积:笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尓积(Cartesian product),又称直积表示为...

  • 笛卡尔积

    之前写一个SKU的插件,用到了【笛卡尔积】,明白其原理,但是就是写不出来 看来功力尚浅,需要努力 后来借鉴了网上的...

  • 笛卡尔积

    1.什么笛卡尔积 百科:笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尔积(Cartesian product),又...

  • 笛卡尔积

    Pandas如何实现相当于SQL交叉连接(笛卡尔积) https://www.cnpython.com/qa/14...

  • 笛卡尔积

    首先知道啥是笛卡尔积,百度百科中解释是这样的: 笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尔积(Cartesia...

  • 笛卡尔积

    假设集合A={a, b},集合B={0, 1, 2},则两个集合的笛卡尔积为{(a, 0), (a, 1), (a...

  • [LeetCode 17] Letter Combination

    Solution 其实就是笛卡尔积

  • Oracle学习(2)

    多表查询: 会出现笛卡尔积,为了避免出现笛卡尔积,要使用where 语句对字段进行关联操作 左右连接 (+)在=左...

网友评论

      本文标题:笛卡尔积

      本文链接:https://www.haomeiwen.com/subject/ragrxhtx.html