在Python中将列表中所有元素的值减1的最Python化和优雅的方式是什么?Python:将列表中的所有元素相乘,但先减1 1.
即,计算(p [0] -1)*(p [1] -1)* ... *(p [n-1] -1)其中n是列表p的大小。
在Python中将列表中所有元素的值减1的最Python化和优雅的方式是什么?Python:将列表中的所有元素相乘,但先减1 1.
即,计算(p [0] -1)*(p [1] -1)* ... *(p [n-1] -1)其中n是列表p的大小。
>>> l = [5, 8, 7, 2, 3]
>>> reduce(lambda x, y: x*(y-1), l, 1) #multiply each item by its subtracted value
336
>>>
感谢@AChampion另一个改进
注意:'reduce'在py3的'functools'中。你可以在reduce中减去一个:'reduce(lambda x,y:x *(y-1),l,1)'。 – AChampion
使用functools.reduce在python3随着AJ的例子:
>>> l = [5, 8, 7, 2, 3]
>>> l = [item-1 for item in l] #subtract 1
>>> functools.reduce(lambda x, y: x*y, l) #multiply each item
336
>>>
通过解释代码的作用来增强对代码的回答。解释你的代码将有助于未来用户理解正在发生的事情,并根据自己的需求调整你的答案。 –
有很多种方法繁殖的所有元素一个可迭代的。
所以,对于一个列表a
就可以了,例如:
prod([x-1 for x in a])
functools.reduce(lambda x, y: x*y, [x-1 for x in a])
result=1
for x in [x-1 for x in a]: result*=a
请注意,我用的列表理解:[x-1 for x in a]
,但它也可以用numpy的实现:array(a)-1
相关问题:What's the Python function like sum() but for multiplication? product()?
为什么downvote? –
result = 1
for x in p:
result *= x - 1
恩,downvote究竟是什么? –
您的答案被标记为低质量;可能是因为你没有解释如何或为何回答这个问题。我认为downvote来自低质量队列。 – Ben
@Ben好吧,这可能会解释它。 Morons不会被打扰阅读这个问题,并且认为即使是最明显且自明的代码也需要用额外的文本来稀释...... –
请阅读并按照帮助发帖准则文档。 [最小,完整,可验证的示例](http://stackoverflow.com/help/mcve)适用于此处。在您发布代码并准确描述问题之前,我们无法有效帮助您。 StackOverflow不是一个编码或教程服务。 – AChampion