2017-05-08 158 views
1

在Python中將列表中所有元素的值減1的最Python化和優雅的方式是什麼?Python:將列表中的所有元素相乘,但先減1 1.

即,計算(p [0] -1)*(p [1] -1)* ... *(p [n-1] -1)其中n是列表p的大小。

+2

請閱讀並按照幫助發帖準則文檔。 [最小,完整,可驗證的示例](http://stackoverflow.com/help/mcve)適用於此處。在您發佈代碼並準確描述問題之前,我們無法有效幫助您。 StackOverflow不是一個編碼或教程服務。 – AChampion

回答

0

使用numpy

import numpy as np 
np.prod(np.array(p)-1) 

或者使用內置的一個一個Python,例如operator

reduce(operator.mul,\ 
     map(lambda el:el-1,\ 
      p),\ 
     1) 
+0

我很好奇這個-1。我會很高興知道爲什麼**這項工作,並提出問題**。 – Kanak

0
>>> l = [5, 8, 7, 2, 3] 
>>> reduce(lambda x, y: x*(y-1), l, 1) #multiply each item by its subtracted value 
336 
>>> 

感謝@AChampion另一個改進

+0

注意:'reduce'在py3的'functools'中。你可以在reduce中減去一個:'reduce(lambda x,y:x *(y-1),l,1)'。 – AChampion

1

使用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 
>>> 
+1

通過解釋代碼的作用來增強對代碼的回答。解釋你的代碼將有助於未來用戶理解正在發生的事情,並根據自己的需求調整你的答案。 –

-1

有很多種方法繁殖的所有元素一個可迭代的。

所以,對於一個列表a就可以了,例如:

使用numpy的:

prod([x-1 for x in a]) 

使用Lambda和functools

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()?

+0

爲什麼downvote? –

-1
result = 1 
for x in p: 
    result *= x - 1 
+0

恩,downvote究竟是什麼? –

+1

您的答案被標記爲低質量;可能是因爲你沒有解釋如何或爲何回答這個問題。我認爲downvote來自低質量隊列。 – Ben

+1

@Ben好吧,這可能會解釋它。 Morons不會被打擾閱讀這個問題,並且認爲即使是最明顯且自明的代碼也需要用額外的文本來稀釋...... –

相關問題