Python新手,所以请...
刚刚遇到 comprehensions 并且我明白他们很快就会分裂成点产品或矩阵乘法(虽然结果是一个集合的事实使它们更有趣),但我在这一点上,我想询问是否有任何公式来确定理解的长度,例如:
{x * y for x in {3, 4, 5} for y in {4, 5, 6}}
。
显然我不是这个特别的意思:
len({x * y for x in {3, 4, 5} for y in {4, 5, 6}}) = 8
,但是对于这种类型的任何一般操作,使用两个元素的元素乘法,并且得到结果整数的集合(没有重复),对于任何给定的长度x和y,连续整数,以及已知的x [1]和y [1] 。
我知道这个问题正处于编码和数学的十字路口,但我在这里要求的是它发生是一个有点普遍或众所周知的计算问题。因为我读过,理解被广泛使用。只有在这个意义上我才对这个问题感兴趣。根据迄今为止的评论,我的感觉是事实并非如此。
编辑:
例如,这是一种模式:如果x = {1, 2, 3}
len(x * y)
理解等于9提供y[1] = or > 3
。例如,len({x * y for x in {1, 2, 3} for y in {1111, 1112, 1113}}) = 9
。暂时,长度=长度(x)*长度(y),条件是x和y的元素没有重叠。它适用于4元素集吗?当然:len({x * y for x in {1, 2, 3, 4} for y in {1111, 1112, 1113, 1114}}) = 16
。事实上,整数不需要连续,只是不重叠:len({x*y for x in {11,2,39} for y in {3,4,5}}) = 9
。
而且,是的,它不起作用......看看这个:
{x * y for x in {0, 1, 3} for y in {36, 12, 4}} = {0, 4, 12, 36, 108}
答案 0 :(得分:2)
不,只有输入的长度这是不可能的。您可以使用数学通过计算公共素数因子来确定长度,但所涉及的工作不会仅仅计算结果并采用len
来改进,并且它需要知道设置内容,而不仅仅是它们的长度
毕竟,只有长度,{2, 3}
乘以{2, 3}
(生成{4, 6, 9}
)无法区分{2, 3}
乘以{10, 11}
,这将产生完全独特的产出(总共四个)。通过矛盾做出简单的证明;仅知道输入长度不足以确定输出长度,(2, 2)
上的单个操作可能无法产生3和4而无需额外输入。
答案 1 :(得分:1)
例如,这是一个模式:如果x = {1,2,3},len(x * y)理解等于9提供
y[1] = or > 3
(我认为你的意思是y[1] >= 3
和y[1]
作为集合中的最小元素,因为根据定义,集合没有顺序)
对于2组大小为3的连续元素和空交集,满足你的条件y[1]>=3
,这里是反例
{x*y for x in {1,2,3} for y in {4,5,6}}
因为这是集合,所以length(A)*length(B)
并且依赖于A和B的内容的元素总是很少,但你可以找到值的范围
min(length(A),length(B)) <= length(A*B) <= length(A)*length(B)
要找到A * B的真实价值而不计算它,你必须做更多的检查,这只是更加复杂,只做A * B