按列表的所有元素对列表进行乘法,除非它自己的索引

时间:2016-03-29 15:07:15

标签: python list numpy

我尝试构建一个函数,给定一个列表将返回一个列表,其中元素相乘,排除了同一索引处的元素。例如,对于列表[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;我"将参考指数而不是那些指数的值。

  1. 如何创建引用索引而不是值
  2. 的内容
  3. 有没有更好的方法来解决这个问题?

7 个答案:

答案 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的情况。