python表的笛卡尔积
① python自带性能强悍的标准库 itertools
可迭代对象就像密闭容器里的水,有货倒不出
itertools是python内置的标准模块,提供了很多简洁又高效的专用功能,使用得当能够极大的简化代码行数,同时所有方法都是实现了生成器函数,这就意味着极大的节省内存。
itertools提供的功能主要分为三大块,以最新版本的3.10为例:
方法如下:
导入包
iteratortools.count(start=0, step=1)
数值生成器,可以指定起始位置和步长,并且步长可以为浮点数。无限输出,一直累加,在例子中需要边睡眠1s边输出。
iteratortools.cycle(iteratorable)
无限循环取出可迭代对象里的元素
iteratortools.repeat(object[, times])
不断重复输出整个object,如果指定了重复次数,则输出指定次数,否则将无限重复。
iteratortools.accumulate(iteratorable[, func, *, initial=None])
返回对列表中元素逐项的操作,操作有:
iteratortools.chain(*iteratorables)
将多个可迭代对象构建成一个新的可迭代对象,统一返回。类似于将多个对象链成一条串
优点:可以将多个可迭代对象整合成一个,避免逐个取值
chain.from_iteratorable(iteratorable)
将一个迭代对象中将所有元素类似于chain一样,统一返回。
iteratortools.compress(data, selectors)
按照真值表筛选元素
iteratortools.dropwhile(predicate, iteratorable)
按照条件筛选,丢弃掉第一次不符合条件时之前的所有元素
iteratortools.takewhile(predicate, iteratorable)
根据predicate条件筛选可迭代对象中的元素,只要元素为真就返回,第一次遇到不符合的条件就退出。
按照条件筛选,丢弃第一次遇到不符合条件之后的元素。行为类似于上一个dropwhile,区别在于丢弃的选择不同。
iteratortools.filterfalse(predicate, iteratorable)
保留不符合条件的元素,返回迭代器
iteratortools.groupby(iteratorable, key=None)
按照指定的条件分类。输出条件和符合条件的元素
iteratortools.islice(iteratorable, start, stop[, step])
对迭代器进行切片,老版本中不能指定start和stop以及步长,新版本可以。
iteratortools.starmap(function, iteratorable)
将function作用于可迭代对象上,类似于map函数
iteratortools.tee(iteratorable, n=2)
从一个可迭代对象中返回 n 个独立的迭代器
iteratortools.zip_longest(*iteratorables, fillvalue=None)
创建一个迭代器,从每个可迭代对象中收集元素。如果可迭代对象的长度未对齐,将根据 fillvalue 填充缺失值。
迭代持续到耗光最长的可迭代对象。大致相当于:
iteratortools.proct(*iteratorables, repeat=1)
生成多个可迭代对象的笛卡尔积
大致相当于生成器表达式中的嵌套循环。例如, proct(A, B) 和 ((x,y) for x in A for y in B) 返回结果一样。
将可选参数 repeat 设定为要重复的次数。例如,proct(A, repeat=4) 和 proct(A, A, A, A) 是一样的
iteratortools.permutations(iteratorable, r=None)
由 iteratorable 元素生成长度为 r 的排列。元素的排列,类似于给一个[1,2,3],选取其中两个元素,一共有多少种组合方法?不要求元素排列之后的位置。
这个方法能够完美解决算法中的全排列问题,简直是量身定做。如果早知道这么简单,当年考算法也不会。。,哎
可参见leetcode46题: https://leetcode-cn.com/problems/permutations/
iteratortools.combinations(iteratorable, r)
返回由输入 iteratorable 中元素组成长度为 r 的子序列。元素不可重复使用。子序列是要求元素在排列之后和之前的相对位置不变的。1,2,3中3在1的后面,子序列中3也一定在1的后面。
这个方法可以曲线解决组合总数问题
https://leetcode-cn.com/problems/combination-sum/
iteratortools.combinations_with_replacement(iteratorable, r)
返回由输入 iteratorable 中元素组成的长度为 r 的子序列,允许每个元素可重复出现
原文 http://www.cnblogs.com/goldsunshine/p/15678828.html
② 一张表5条数据一张表10,产生的笛卡尔积
有两张表,一张有5行记录,另一张有4行记录,做了笛卡尔积后可以得到 5 * 4 = 20 行记录
笛卡尔(积): 给定一组域D1,D2,…,Dn,这些域中可以有相同的.D1,D2,…,Dn的笛卡尔积为:
D1×D2×…×Dn={(d1,d2,…,dn)|di?Di,i=1,2,…,n}
例子:
假设集合A={a,b},集合B={0,1,2},则两个集合的笛卡尔积为{(a,0),(a,1),(a,2),(b,0),(b,1),(b,2)}.
③ tuple在python中什么意思
元组(tuple)是关系数据库中的基本概念,关系是一张表,表中的每行(即数据库中的每条记录)就是一个元组,每列就是一个属性。 在二维表里,元组也称为行。
笛卡尔积中每一个元素(d1,d2,…,dn),叫作一个n元组(n-tuple)或简称元组。当关系是一张表,二维表中的行表中的每行(即数据库中的每条记录)就是一个元组,每列就是一个属性。在二维表里,元组也称为记录。
简介:
Python由荷兰数学和计算机科学研究学会的Guido van Rossum于1990 年代初设计,作为一门叫做ABC语言的替代品。Python提供了高效的高级数据结构,还能简单有效地面向对象编程。
Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的编程语言,随着版本的不断更新和语言新功能的添加,逐渐被用于独立的、大型项目的开发。
④ 关系数据库,笛卡儿积
关系数据库中的笛卡尔积的结果就是两个表中行数的乘积
笛卡尔积:
SELECT * FROM table1, table2
没有 WHERE 子句的交叉联接将产生联接所涉及的表的笛卡尔积
第一个表的行数乘以第二个表的行数等于笛卡尔积结果集的大小
回答补充
属性是结果的列数 +
元组是结果的行数 ×
⑤ 数据库问题 笛卡尔积怎么计算
按照行来计算,可以把每行的3列看做一个整体(看成1列)。
设A,B为集合,用A中元素为第一元素,B中元素为第二元素构成有序对,所有这样的有序对组成的集合叫做A与B的笛卡尔积,记作AxB。
笛卡尔积的符号化为:
A×B={(x,y)|x∈A∧y∈B}
A1 A2 A3 A1 A2 A3
a b c a b c
a b c b a c
a b c c a b
b a c a b c
b a c b a c
b a c c a b
c a b a b c
c a b b a c
c a b c a b
(5)python表的笛卡尔积扩展阅读:
一、运算性质:
1、对任意集合A,根据定义有
AxΦ =Φ , Φ xA=Φ
2、笛卡尔积运算不满足交换律,即
AxB≠BxA(当A≠Φ ∧B≠Φ∧A≠B时)
3、笛卡尔积运算对并和交运算满足分配律,即
Ax(B∪C)=(AxB)∪(AxC)
(B∪C)xA=(BxA)∪(CxA)
Ax(B∩C)=(AxB)∩(AxC)
(B∩C)xA=(BxA)∩(CxA)
二、应用场合:
在某些情况下用于寻找连续日期中残缺的数据,可以先用笛卡尔积做一个排列组合,然后和目标表进行关联,以查询少了哪些数据。
例如:在一张考勤记录表中,记录了100个人在2018年8月的考勤信息,理论上这些人应该每天都有记录。但是实际上有的人在某些天上面的数据缺少了,然而不论是一天一天的查询,还是一个一个人的查询,都比较麻烦。
在这种情况下,可以针对每个人每一天做一个笛卡尔积处理。去除与实际表的关联,就很容易找出确实数据了。
⑥ 数据库笛卡尔积
所谓笛卡尔积,通俗点说就是指包含两个集合中任意取出两个元素构成的组合的集合.
⑦ 笛卡尔积是什么进行运算
笛卡儿积就是把两个(多个)表的结果集相乘
r表中的每一条数据与s表中的每一条数据匹配并呈现,数量级就是两表的成绩,属性为列相加
设A,B为集合,用A中元素为第一元素,B中元素为第二元素构成有序对,所有这样的有序对组成的集合叫做A与B的笛卡尔积,记作AxB.
笛卡尔积的符号化为:
A×B={(x,y)|x∈A∧y∈B}
例如,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)}
运算性质:
1.对任意集合A,根据定义有
AxΦ =Φ , Φ xA=Φ
2.一般地说,笛卡尔积运算不满足交换律,即
AxB≠BxA(当A≠Φ ∧B≠Φ∧A≠B时)
3.笛卡尔积运算不满足结合律,即
(AxB)xC≠Ax(BxC)(当A≠Φ ∧B≠Φ∧C≠Φ时)
4.笛卡尔积运算对并和交运算满足分配律。