Python 让lambda查找数字对的乘积
代码:Python 让lambda查找数字对的乘积,python,Python,代码: from functools import reduce num = 2989 numSplit = [int(x) for x in str(num)] # convert the number to a list with each digit separated numProduct = reduce((lambda x,y: x*y), numSplit) # uses reduce to multiply each number in order print(numPr
from functools import reduce
num = 2989
numSplit = [int(x) for x in str(num)]
# convert the number to a list with each digit separated
numProduct = reduce((lambda x,y: x*y), numSplit)
# uses reduce to multiply each number in order
print(numProduct)
问题:
使用NumProduct,我试图找到2*9
、9*8
和8*9
的独立产品
我不知道如何修改lambda,以便只在[2,9,8,9]
中查找数字对(或各种其他长度)的乘积。我需要这方面的帮助。Tnx Reduce()
会将整个iterable减少为一个值-这不是您想要的。相反,考虑将相邻值分组成组,并在每个组内取乘积。< /P>
num = 2989
numSplit = [int(x) for x in str(num)]
numProduct = [x * y for x, y in zip(numSplit, numSplit[1:])]
在这里,我将zip
列表numSplit
与numSplit
片段偏移1,以将每个数字与其右邻居分组。然后将这两个值相乘,对其进行迭代。如果一个列表比另一个短,zip
会将所有列表截短到最短的长度-这就是此处发生的情况,防止在末尾出现额外的术语
结果:
>>> numProduct
[18, 72, 72]
>>> numProduct
[144, 648]
更新
如果您想支持任意大小的分组,请使用以下方法:
from functools import reduce
from operator import mul
num = 2989
size = 3
numSplit = [int(x) for x in str(num)]
numProduct = [reduce(mul, p) for p in zip(*(numSplit[x:] for x in range(size)))]
结果:
>>> numProduct
[18, 72, 72]
>>> numProduct
[144, 648]
Reduce()
将整个iterable减少为一个值-这不是您想要的。相反,考虑将相邻值分组成组,并在每个组内取乘积。< /P>
num = 2989
numSplit = [int(x) for x in str(num)]
numProduct = [x * y for x, y in zip(numSplit, numSplit[1:])]
在这里,我将zip
列表numSplit
与numSplit
片段偏移1,以将每个数字与其右邻居分组。然后将这两个值相乘,对其进行迭代。如果一个列表比另一个短,zip
会将所有列表截短到最短的长度-这就是此处发生的情况,防止在末尾出现额外的术语
结果:
>>> numProduct
[18, 72, 72]
>>> numProduct
[144, 648]
更新
如果您想支持任意大小的分组,请使用以下方法:
from functools import reduce
from operator import mul
num = 2989
size = 3
numSplit = [int(x) for x in str(num)]
numProduct = [reduce(mul, p) for p in zip(*(numSplit[x:] for x in range(size)))]
结果:
>>> numProduct
[18, 72, 72]
>>> numProduct
[144, 648]
如果你真的想,你可以在这里使用reduce
from operator import mul
from functools import partial, reduce
p = partial(reduce, mul)
list(map(p, zip(numSplit, numSplit[1:])))
[18, 72, 72]
[reduce(mul, y) for y in zip(numSplit, numSplit[1:])]
[18, 72, 72]
如果你真的想,你可以在这里使用reduce
from operator import mul
from functools import partial, reduce
p = partial(reduce, mul)
list(map(p, zip(numSplit, numSplit[1:])))
[18, 72, 72]
[reduce(mul, y) for y in zip(numSplit, numSplit[1:])]
[18, 72, 72]
使用
itertools.compositions(numSplit,2)
。使用itertools.compositions(numSplit,2)
。有办法增加分组的长度吗?就像按298和989分组一样。@user8507808更新以处理任意大小的分组有没有办法增加分组的长度?如按298和989对其进行分组。@user8507808已更新以处理任意大小的分组