我尝试构建一个函数,给定一个列表将返回一个列表,其中元素相乘,排除了同一索引处的元素。例如,对于列表[1,2,3,4]
,它将返回[2*3*4,1*3*4,1*2*3]
。
这就是我试过的
import numpy as np
def my_function(ints):
products = np.ones(len(ints))
indices = range(0,len(ints))
for i in ints:
if i != indices[i]
products *=ints[i]
return products
我认为我的问题是我在想#34;我"将参考指数而不是那些指数的值。
答案 0 :(得分:4)
UPDATE
这很容易:
INSERT
答案 1 :(得分:1)
摘自@ interjay的评论:
from operator import mul
total = reduce(mul, ints)
multiplied = [total/y for y in ints]
答案 2 :(得分:1)
int RecursiveMath::restaDigitos(int n){
if(n/10 <= 1){
return 0;
}else{
return restaDigitos(n/10) - n%10;
}
}
的解决方案:
enumerate
答案 3 :(得分:1)
列表理解
array_of_nums = np.random.rand(10)
[np.prod([i for x, i in enumerate(array_of_nums) if x != e]) for e, y in enumerate(array_of_nums)]
答案 4 :(得分:1)
import numpy as np
def remainingProduct(arr):
a = arr
list1 = []
n = len(arr)
for i in range(0, n):
b = a[0]
a.remove(a[0])
c = np.prod(a)
list1.append(c)
a.append(b)
return list1
# print(remainingProduct([3, 2, 1]))#[2, 3, 6].
答案 5 :(得分:0)
这是一种使用reduce的方法:
from functools import reduce
from operator import mul
l = [1, 2, 2, 3, 4]
# Modified to work with lists that contain dupes thanks to the feedback in comments
print [reduce(mul, l[:i]+l[i+1:], 1) for i in xrange(len(l))]
>>> [48, 24, 24, 16, 12]
答案 6 :(得分:0)
将枚举合并到代码中的方法是
import numpy as np
def intmult(ints):
products = np.ones(len(ints))
for i,j in enumerate(ints):
products *= ints[i]
for i,j in enumerate(products):
products[i] /= ints[i]
return products
请注意,这并不包括其中一个元素为0的情况。